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