Как объединить команды ssh в цепочку из нескольких переходов?

Как объединить команды ssh в цепочку из нескольких переходов?

Можно ли объединить несколько 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)

Связанный контент