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/configarchivo y agregue el host a Btravé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 Cque 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 -qindica 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 Athrough 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 %pinicia una netcatconexión con el host final %hen el puerto %p(ambos serán completados por SSH según la información en el ~/.ssh/configarchivo).
Si necesita especificar una clave personalizada Bpara usar, puede hacerlo modificando la ssh-addparte:
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'