Можно ли объединить несколько SSH-подключений в цепочку, указав каждое соединение как SSH-хост?
Я знаю, что можно использовать флаг -W
или nc
сделать второй переход на другое имя хоста или IP-адрес (см., например,ssh через несколько хостов). Мне не удалось заставить это работать так, как я хочу, по нескольким причинам. Во-первых, для второго перехода я хочу использовать файл ключа, хранящийся на промежуточном хосте, и я не вижу способа указать это с помощью или . -W
Во nc
-вторых, конечный пункт назначения имеет переменный IP-адрес. Чтобы справиться с этим, у меня есть скрипт, работающий на пункте назначения, который записывает свой IP-адрес в файл, хранящийся на промежуточном хосте, а затем скрипт ( look_up_ip.sh
) на промежуточном хосте, который выводит этот IP-адрес. На промежуточном хосте у меня есть эта запись в ~/.ssh/config
:
Host destination
HostName destination
User dest_user
IdentityFile ~/.ssh/destination
PreferredAuthentications publickey
ProxyCommand nc $(look_up_ip.sh %h) %p
что позволяет мне подключаться к месту назначения из промежуточного звена всего лишь с помощью ssh destination
.
Я хотел бы добавить что-то ~/.ssh/config
на первую машину, чтобы определить хост назначения (например, hopped_destination
), чтобы ssh сначала подключался к промежуточному хосту, а затем делал это ssh destination
оттуда, так что я могу просто сделать это ssh hopped_destination
с первой машины и иметь промежуточное ~/.ssh/config
дело с файлом идентификации и поиском IP для пункта назначения. Одна из причин, по которой я хочу этого, заключается в том, что в конечном итоге я хочу иметь возможность подключаться к пункту назначения с помощью VNC, используя vncviewer -via destination localhost:0
, и я хочу, чтобы соединение не было доступно другим пользователям на промежуточном хосте (как подразумевается в частях принятого ответа на этот вопрос:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops). Я надеялся, что на первой машине можно будет ввести ssh
что ProxyCommand
-то вроде:
Host destination
ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination
но я не нашел вариантов, которые позволили бы этому работать.
Я также был бы рад любым предложениям по лучшим способам сделать это (есть ли способ избавиться от того, что nc
ProxyCommand
я использую сейчас?). Я мог бы, вероятно, разработать скрипт для выполнения команды VNC более напрямую, но это может быть сложнее (обрабатывать переадресацию портов напрямую и быть уверенным, что все закрыто при выходе, и быть уверенным, что порт не открыт для всех пользователей).
решение1
пример из моего файла конфигурации ssh;
Host vmike2-squid-cache
User mike
ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22
(единственное, что я изменил, это IP)