La respuesta de Snowball ayudó mucho. Sin embargo, hice algunas modificaciones al comando y quería explicar cómo funciona. Dada esta situación:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Modifique su ~/.ssh/config
archivo y agregue el host a B
través del cual desea saltar, tal como configuraría normalmente un host:
Host B
User myusername
HostName b.mycompany.com
Luego agrega el host en el C
que desea terminar:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
Tenga en cuenta el ProxyCommand
, donde:
ssh -T -q
indica que no debe asignar un pseudo-TTY ( -T
) y ser silencioso ( -q
);
- una vez en el host de salto
B
, agregamos la clave a las claves SSH de A
through ssh-add
;
- que solo funciona porque reenviamos el agente SSH usando
-o 'ForwardAgent yes'
.
ssh-add -t 1
indica que quiero que la clave se agregue solo durante el segundo segundo necesario para autenticarse en el host final C;
- y finalmente,
nc %h %p
inicia una netcat
conexión con el host final %h
en el puerto %p
(ambos serán completados por SSH según la información en el ~/.ssh/config
archivo).
Si necesita especificar una clave personalizada B
para usar, puede hacerlo modificando la ssh-add
parte:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'