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

пример из моего ssh конфигурационного файла;

Host vmike2-squid-cache
  User mike
  ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22

(единственное, что я изменил, это IP)

Ответ или решение

Как соединить SSH-команды через несколько перескоков

Соединение через SSH с несколькими хостами, часто называемое "SSH через перескоки", представляет собой универсальную задачу для системных администраторов и специалистов в области IT. Рассмотрим процесс настройки такой конфигурации, используя пример с промежуточным хостом и динамическим IP-адресом конечного узла.

Шаг 1: Определение структуры соединения

Для начала необходимо понять вашу исходную задачу. Воспользуемся такой структурой:

  1. Машина — это ваша исходная рабочая станция.
  2. Промежуточный хост — это сервер, к которому вы сможете легко подключаться, и на котором размещён файл с текущим IP-адресом конечного узла.
  3. Конечный хост — это сервер, к которому вы хотите подключиться, но его IP-адрес меняется.

Шаг 2: Настройка SSH конфигурации на промежуточном хосте

Как указано в вашем вопросе, вы уже создали запись в ~/.ssh/config на промежуточном хосте для подключения к конечному узлу:

Host destination
    HostName destination
    User dest_user
    IdentityFile ~/.ssh/destination
    PreferredAuthentications publickey
    ProxyCommand nc $(look_up_ip.sh %h) %p

Это позволяет вам легко подключиться к конечному узлу с промежуточного хоста. Теперь следующим шагом будет настройка конфигурации на вашей исходной машине.

Шаг 3: Настройка SSH конфигурации на исходной машине

Чтобы инициировать подключение от вашей исходной машины через промежуточный хост к конечному, вам нужно будет добавить новый хост в ваш ~/.ssh/config файл на исходной машине. Пример конфигурации выглядит следующим образом:

Host hopped_destination
    HostName intermediate_host
    User intermediate_user
    IdentityFile ~/.ssh/intermediate_key
    ProxyCommand ssh -W destination:22 %h

Пояснения к конфигурации:

  • HostName указывает на имя или IP-адрес вашего промежуточного хоста.
  • User — это имя пользователя для подключения к промежуточному дому.
  • ProxyCommand указывает на использование SSH для соединения с конечным узлом, в данном случае мы используем параметр -W, который отправляет информацию через TCP подключение.

Шаг 4: Тестирование подключения

После завершения настройки конфигурации вы можете протестировать подключение, выполнив следующую команду на исходной машине:

ssh hopped_destination

Если настройки корректны, вы должны быть аутентифицированы на промежуточном хосте, а затем автоматически переключены на конечный узел.

Шаг 5: Использование VNC через SSH-туннель

Чтобы установить VNC-соединение через SSH с использованием указанного метода, вам потребуется немного изменить команду. Можно использовать следующую команду:

vncviewer -via intermediate_user@intermediate_host destination:0

Это подключение будет защищено, и доступ к серверу VNC будет ограничен только вашему сеансу.

Возможные проблемы и рекомендации

  1. Проблемы с авторизацией: Убедитесь, что ключи SSH правильно настроены и что у вас есть соответствующие разрешения на обоих хостах.
  2. Динамические IP-адреса: Вы уже практикуете использование скрипта look_up_ip.sh, чтобы получать текущий IP. Убедитесь, что этот скрипт работает корректно и возвращает ожидаемое значение.
  3. Улучшение безопасности: Если есть возможность, рассмотрите использование ssh-agent для управления вашими ключами SSH более безопасно.

Заключение

Теперь вы имеете полное представление о том, как осуществить SSH-подключения через несколько перескоков со специализированной конфигурацией. Эта методология поможет вам обеспечить безопасность и было бы полезна при доступе к ресурсам в сложных сетевых конфигурациях. Если у вас возникнут дополнительные вопросы или потребности в уточнении, не стесняйтесь их задать.

Оцените материал
Добавить комментарий

Капча загружается...