Изменить SSH Jump Host на основе префикса/суффикса имени хоста

Изменить SSH Jump Host на основе префикса/суффикса имени хоста

Я хочу получить доступ к нескольким очень похожим машинам, которые находятся в частной сети: A, B, C. Я настроил JumpHost J1и установил конфигурацию для его использования:

Host J1
    HostName 123.123.123.123
    User ciprian

Host A B C
    HostName %h
    User ciprian
    ProxyJump J1
    LocalForward 8501 localhost:8501

Сейчас я настраиваю второй JumpHost, J2, и хотел бы подключиться к тем же машинам через J1или J2. Есть ли способ написать файл конфигурации так, чтобы если J1в имени машины есть , она бы перепрыгнула через J1, или если есть J2, она бы перепрыгнула через J2? Конечно, без ручного указания точных совпадений :)

Я могу написать конфигурацию так:

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

Host A* B* C*
    # --- Which Host name? ---
    User ciprian
    # ...

поэтому если я укажу ssh A-J1, он подберет настройки для перехода через J1. Однако, когда он анализирует определение, связанное с A*, я больше не могу указать HostName, так как %hбудет разрешаться в A-J1, а я хотел бы, чтобы он разрешался просто в A.

CanonicalizeHostNameЯ верю, что с помощью и можно сотворить некое волшебство CanonicalizePermittedCNAMEs, но не знаю, как именно.

решение1

Вы можете использовать ProxyCommand и небольшой скрипт оболочки:

Host *-prefix1
   ProxyCommand ssh -q jump1 'H="%h"; nc ${H%%-prefix1} %p || echo "ProxyCommand failed! >&2"'

Host *-prefix2
   ProxyCommand ssh -q jump2 'H="%h"; nc ${H%%-prefix2} %p || echo "ProxyCommand failed! >&2"'

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