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 давал мне ошибки: stdin не был терминалом, когда я пробовал его на своей машине; ваша машина может отличаться.)

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


Обратите внимание: добавляйте «-t» только в том случае, если вы просто входите на удаленный компьютер. Для запуска команды на удаленной машине, не ставьте их , как они могут / испортят некоторые вещи (для Exemple: tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " : может быть повреждено , если вы добавите -tСмотрите Exemple чудесного StephaneChazelas Ответит! Unix.stackexchange.com/questions/151916/ … )
Оливье Дюлак

3
Использование -J более безопасно, чем этот ответ, потому что тогда у вас есть возможность хранить все ключи ssh на вашем локальном компьютере. Опция -J была введена в openssh версии 7.3, как упоминалось в ответе @Miikka
Эрик Шёлунд,

1
@ ErikSjölund Openssh не допускает более одного -Jварианта. Я думаю, что вы могли бы сделать это с несколькими ProxyCommandопциями в вашей конфигурации.
амфетамина

1
@amphetamachine С помощью -Jвы можете указать разделенный запятыми список прыжков, которые нужно пройти. Но использование ProxyCommandс -W- все еще намного лучший подход, чем этот ответ, если вы используете версию, слишком старую для поддержки -J.
Касперд

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 Я использую что-то похожее на это, чтобы передать данные из тестовой сети в сеть с помощью промежуточного сервера.
Arcege

2
Да, это прекрасно работает!
таращиться

15
Просто для записи, что более новые версии ssh поддерживают эту -Wопцию, вы можете сделать что-то вроде ProxyCommand ssh -W %h:%p gatewayэтого, вместо того, чтобы зависеть от nc
Ульрих Дангел

Хорошо знать! Спасибо
Аарон Браун

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

9

В OpenSSH 7.3 ssh добавил -Jфлаг командной строки и соответствующий ProxyJumpпараметр конфигурации, чтобы решить именно эту проблему.

Укажите хосты, через которые вы хотите использовать ssh, в виде списка через запятую -J. Например:

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

-5

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

Должен был бы посмотреть, как его настроить, хотя.

:)


Вы не хотите (и, вероятно, не можете) открыть порт или ваш университетский шлюз SSH…
Стефан Гименес

9
Если вы не знаете, как это сделать, и не можете его найти, почему вы опубликовали этот ответ?
амфетамина

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