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/config
arquivo e adicione o host B
pelo 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 C
qual 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 -q
indica 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 A
through 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 %p
inicia uma netcat
conexão com o host final %h
na porta %p
(ambos os quais serão preenchidos pelo SSH com base nas informações no ~/.ssh/config
arquivo).
Se você precisar especificar uma chave personalizada B
para usar, poderá fazer isso modificando a ssh-add
peç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'