Конфигурация SSH для имени хоста, прочитанного из файла

Конфигурация SSH для имени хоста, прочитанного из файла

Настройка следующая:

  • Локальный ПКс которого я хочу подключиться по ssh к…
  • Узел шлюзаgatewayкоторый является промежуточным узлом, который используется только для подключения по SSH к…
  • Передний узелfront, снова промежуточный узел, необходимый для подключения по ssh к конечному…
  • Вычислительный узел, который я на самом деле хочу использовать

Я хочу настроить локальную конфигурацию SSH таким образом, чтобы я мог напрямую вводить ssh compute.

Проблема:В отличие от gatewayи front, имя хоста для вычислительного узла не статично (т.е. может меняться несколько раз в течение дня). У меня есть скрипт, compute_node_hostname.shкоторый frontвыводит имя вычислительного узла, т.е. node339. Как я могу использовать его в своей конфигурации?

Следующая простая конфигурация с жестко запрограммированным вычислительным узлом работает:

Host gateway front compute
    User …
    IdentityFile ~/.ssh/id_rsa

Host front
    HostName front
    ProxyJump gateway

Host compute
    HostName node339
    ProxyJump front

Ограничение:Я не могу использовать RemoteCommandв своей конфигурации

решение1

Напомним, что «ProxyJump» — это более умная версия «ProxyCommand» — она выполняет дополнительную работу по копированию параметров, указанных в CLI, но по сути это то же самое, что:

Host compute
    ProxyCommand ssh -W %h:%p front

где %hи %pавтоматически расширяются до запрошенного имени хоста и порта.

Таким образом, вы можете использовать динамическое имя хоста, заменив %hпараметр:

Host compute
    ProxyCommand ssh -W $(compute_node_hostname.sh):%p front

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

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