Тунель ssh-з'єднання через проміжну машину в одній команді


10

Чи є можливість в одній команді встановити ssh-з'єднання з мого комп'ютера A, через комп'ютер B, до комп'ютера C, таким чином, щоб у мене був доступ до оболонки на комп'ютері C?

Зморшка (яка, здається, виключає просто переадресацію ssh-з'єднання за допомогою параметра -L), полягає в тому, що у мене є пароль до облікового запису на комп’ютері B, а обліковий запис на комп’ютері B уповноважений підключатися до облікового запису на комп’ютері C, але Я не маю пароля до облікового запису на комп’ютері С.


Відповіді:


8

Я зрозумів, що ви хочете просто увійти на комп'ютер C, а не насправді тунель нічого від A до C. Отже, для цього слід зробити трюк:

ssh -t computer-b "ssh computer-c"

Можливо, вам доведеться вводити паролі двічі спочатку для комп'ютера B, а потім для комп'ютера C, але цього можна уникнути, використовуючи аутентифікацію пари ключів ssh.


1
Спасибі - це працює! Якщо я можу бути настільки сміливим, щоб просити подальших дій. Будь-які ідеї, як я можу скопіювати файл від A до C однією командою?
санітарність

Це трохи хитро. Це можна зробити, додавши в суміш дьоготь, але якщо це лише один файл, а комп'ютер B має дисковий простір, щоб затримати його деякий час, скопіювати його в два етапи набагато простіше.
аф.

Ви також можете зробити це три рази! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak

0

Напевно, ви хочете використовувати SSH's ProxyCommand: http://benno.id.au/blog/2006/06/08/ssh_proxy_command


Я не можу знайти спосіб зробити цю роботу, оскільки у мене немає пароля для комп’ютера C, і такий підхід, схоже, вимагає цього. Відкриті для пропозицій, хоча цей підхід здається більш елегантним.
санітарність

0

Якщо ви використовуєте ключі ssh, ви можете створити новий ключ для машини B і використовувати його для підключення від A до B. На машині B ви можете додати

command="ssh C" ssh-....

у ~/.ssh/authorized_keysфайлі. Це означає, що щоразу, коли ви підключатиметесь до B за допомогою цього ключа ssh, він виконує ssh Cкоманду.

Я не знаю, чи працює це з scp.


0

Використовуйте ProxyCommand

Див man ssh_config. Я рекомендую використовувати ProxyCommand. Візьмемо ваш оригінальний сценарій:

  • Комп'ютер A (ваш комп'ютер)
  • Комп'ютер B (ім'я хоста проксі-сервера)
  • Комп'ютер C (доступний лише через SSH з комп’ютера B)

Редагуйте ~/.ssh/configза допомогою наступного вмісту.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Тепер ви зможете прозоро дістатися до Computer C. Наприклад

ssh computerc

Переваги цього методу

Більш безпечний

Вам потрібен лише ваш приватний ключ, щоб він знаходився на комп’ютері A (на вашому комп’ютері). ncКоманда буде виступати в якості проксі - сервера , в якому SSH буде шифрувати трафік через. Сюди входить аутентифікація. Дуже погана ідея розповсюдження вашого приватного ключа на декількох серверах (оскільки будь-який компрометований сервер із приватним ключем врешті-решт компрометує ваш приватний ключ).

Збіг кількох напрямків

Можна скористатися декількома комп'ютерами призначення, використовуючи Host. Один комп'ютер або будь-який комп'ютер у певній мережі (наприклад, 192.168.35.0/24у наведеному вище прикладі) для проксі через комп'ютер B. Він також виконує функцію псевдоніму.

ssh 192.168.35.27

У наведеному вище прикладі він проксі через комп'ютер B потрапить на IP-адресу.

Проксі-ланцюги ланцюга Дейзі

Використовуючи цей метод, ви можете вирізати стільки автоматичних проксі, скільки потрібно. наприклад, ви можете додати комп'ютер D, який доступний лише від комп'ютера C, і він буде працювати прозоро.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdавтоматично проксі через комп'ютер C та комп’ютер B у наведених вище ssh_configприкладах.


Я використовую ProxyJump замість ProxyCommand, і він прекрасно працює. Здається, зараз є більше варіантів.
fgiraldeau
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.