根據主機名稱前綴/後綴更改 SSH 跳轉主機

根據主機名稱前綴/後綴更改 SSH 跳轉主機

我想訪問專用網路上的幾台非常相似的機器: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"'

相關內容