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