
我想訪問專用網路上的幾台非常相似的機器: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 和一些小型 shell 腳本:
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"'