ssh через декілька хостів


37

Щоб дістатися до своєї машини в своєму кабінеті, на даний момент я це роблю:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

Чи є простий спосіб автоматизації цього процесу, можливо, єдина команда, яку я можу використовувати в своєму кінці?


Відповіді:


31

Ви можете використовувати ssh-клієнт для виконання ssh на віддаленій машині після входу.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(Причина, яку я включаю -tу виклики, полягає в тому, що ssh давав мені помилки re: stdin не був терміналом, коли я спробував це на своїй машині; ваша машина може бути іншою.)

Коли ви виходите з останньої оболонки, процес буде виходити з ланцюга, економлячи вас Ctrl-Dзнову і знову.


Зверніть увагу: додайте "-t" лише у випадку, якщо ви просто виконали логін на віддаленій машині. Щоб запустити команду на віддаленій машині, НЕ ставте їх так, як вони можуть / можуть пошкодити деякі речі (наприклад, tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: можуть стати пошкодженими, якщо ви додасте -t! Див. Для прикладу чудову відповідь StephaneChazelas unix.stackexchange.com/questions/151916/ … )
Олів’є Дулак

3
Використання -J є більш безпечним, ніж ця відповідь, оскільки тоді у вас є можливість зберігати всі ключі ssh на вашому локальному комп’ютері. Варіант -J був введений у відкритій версії 7.3, як згадується у відповіді від @Miikka
Erik Sjölund

1
@ ErikSjölund Openssh не дозволяє використовувати більше ніж один -Jваріант. Я думаю, ви могли б зробити це за допомогою декількох ProxyCommandваріантів у вашому конфігурації.
амфетамахін

1
@amphetamachine За допомогою нього -Jможна вказати розділений комами список переходів, які потрібно пройти. Але використання ProxyCommandз -Wце все-таки набагато кращий підхід, ніж ця відповідь, якщо вам трапляється використовувати занадто стару версію для підтримки -J.
kasperd

35

Так, є чудовий спосіб зробити це за допомогою ssh ProxyCommand та netcat

Помістіть щось подібне у свій .ssh / config

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Це ввійде безпосередньо на будь-який сервер .department.university.com, використовуючи хост-стрибок / бастіон unix.university.com. Також вам може знадобитися строфа для unix.university.com безпосередньо.

Ось посилання, що пояснює, як це працює: http://backdrift.org/transparent-proxy-with-ssh

З цією технікою тепер можна просто писати

ssh unix.department.university.com

і все це виявиться прямим. Інструменти, такі як rsync, scp тощо (також все, що є в ssh стеку), також працюватимуть прозоро.


2
+1 Я використовую щось подібне до цього, щоб перенести дані з тестової мережі в мережу prod через сервер встановлення.
Арседж

2
Так, це чудово працює!
габе.

15
Щойно для запису новіших версій підтримка ssh -Wможна вибрати щось на зразок ProxyCommand ssh -W %h:%p gatewayзамість nc
Ulrich Dangel

Добре знати! Thx
Аарон Браун

2
чудово працює, якщо ім’я користувача однакове на всіх машинах; якщо це інакше, ви повинні зробити щось на кшталтProxyCommand ssh -W %h:%p user@gateway
Ріккардо Коссу

9

У OpenSSH 7.3 ssh додав -Jпрапор командного рядка та відповідну ProxyJumpопцію конфігурації, щоб вирішити саме цю проблему.

Надайте хостам, до яких хочете прослухати, як список, розділений комами -J. Наприклад:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

SSH тунелювання. Я не пам'ятаю точно, як це зробити, проте я знаю, що в основному є машина, яка дозволяє дозволити тунель, можливо, підключившись до окремого порту. Таким чином, ви просто підключитесь до тієї самої початкової машини (наприклад, з іншим портом), і вона переведе вас на остаточне місце розташування.

Доведеться шукати, як це налаштувати.

:)


Ви не хочете (і, мабуть, не можете) відкрити порт або свій шлюз для університету…
Stéphane Gimenez

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

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