A resposta de Snowball ajudou muito. No entanto, fiz algumas modificações no comando e quis explicar como ele funciona. Dada esta situação:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Modifique seu ~/.ssh/configarquivo e adicione o host Bpelo qual deseja pular, exatamente como você configuraria normalmente um host:
Host B
User myusername
HostName b.mycompany.com
Em seguida, você adiciona o host no Cqual deseja 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'
Observe o ProxyCommand, onde:
ssh -T -qindica que não deve alocar um pseudo-TTY ( -T) e ficar quieto ( -q);
- uma vez no host de salto
B, adicionamos a chave às chaves SSH de Athrough ssh-add;
- o que só funciona porque encaminhamos o agente SSH usando
-o 'ForwardAgent yes'.
ssh-add -t 1 indica que eu quero que a chave seja adicionada apenas por 1 segundo necessário para autenticar no host final C;
- e, finalmente,
nc %h %pinicia uma netcatconexão com o host final %hna porta %p(ambos os quais serão preenchidos pelo SSH com base nas informações no ~/.ssh/configarquivo).
Se você precisar especificar uma chave personalizada Bpara usar, poderá fazer isso modificando a ssh-addpeça:
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'