Ответ Снежка очень помог. Однако я сделал некоторые изменения в команде и хотел объяснить, как она работает. Учитывая эту ситуацию:
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'