Ответ Снежка очень помог. Однако я сделал некоторые изменения в команде и хотел объяснить, как она работает. Учитывая эту ситуацию:
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Измените ваш ~/.ssh/configфайл и добавьте хост, Bчерез который вы хотите перейти, так же, как вы обычно конфигурируете хост:
Host B
User myusername
HostName b.mycompany.com
Затем вы добавляете хост C, на котором хотите оказаться:
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
Обратите внимание ProxyCommand, где:
ssh -T -qуказывает, что он не должен выделять псевдо-TTY ( -T) и быть тихим ( -q);
- попав на хост перехода
B, мы добавляем ключ к ключам SSH Aсквозного соединения ssh-add;
- который работает только потому, что мы перенаправили использование агента SSH
-o 'ForwardAgent yes'.
ssh-add -t 1 указывает, что я хочу, чтобы ключ был добавлен только в течение 1 секунды, необходимой для аутентификации на конечном хосте C;
- и, наконец,
nc %h %pинициирует netcatсоединение с конечным хостом %hв порту %p(оба будут заполнены SSH на основе информации в ~/.ssh/configфайле).
Если вам нужно указать пользовательский ключ Bдля использования, вы можете сделать это, изменив ssh-addдеталь:
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'