ssh через несколько хостов
Чтобы добраться до моей машины в моем офисе, на данный момент я делаю это:
[email protected]:~$ ssh unix.university.com
[email protected]:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
[email protected]:~$ echo "This is very annoying"
Есть ли простой способ автоматизации этого процесса, возможно, единственная команда, которую я могу использовать в конце?
4 ответа
Вы можете использовать ssh-клиент для выполнения ssh на удаленном компьютере после входа в систему.
ssh -t unix.university.com \
ssh -t unix.department.univeristy.com \
ssh -t office-machine.department.university.com
(Причина, по которой я включаю -t
в invocations, потому что ssh давал мне ошибки re: stdin не был терминалом, когда я пытался это на моей машине, ваша машина может быть другой.)
Когда вы выйдете из последней оболочки, процесс завершит цепочку, и вы снова и снова печатаете Ctrl-D .
Да, есть отличный способ сделать это, используя 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) также будут работать прозрачно.
В OpenSSH 7.3 ssh добавил флаг командной строки -J
и соответствующий ProxyJump
, чтобы решить эту проблему.
Дайте хостам, которые вы хотите передать через ssh, в виде списка, разделенного запятыми, на -J
. Например:
ssh -J unix.university.com,unix.department.university.com \
office-machine.department.university.com
SSH-туннелирование. Я точно не помню, как это сделать, но я знаю, что есть способ, чтобы машина позволяла туннелю, возможно, подключаться к отдельному порту. Таким образом, вы просто используете оболочку для одной и той же начальной машины (например, с другим портом), и она будет останавливаться на вашем конечном месте.
Нужно будет посмотреть, как его настроить.
:)