Відповідь Снігової кулі дуже допомогла. Однак я вніс деякі зміни в команду і хотів пояснити, як вона працює. З огляду на таку ситуацію:
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'