
Я хочу получить доступ к нескольким очень похожим машинам, которые находятся в частной сети: 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"'