ホスト名のプレフィックス/サフィックスに基づいて SSH ジャンプホストを変更する

ホスト名のプレフィックス/サフィックスに基づいて SSH ジャンプホストを変更する

プライベート ネットワーク上にある、非常によく似たマシンにアクセスしたいと考えています: A、、。JumpHost を構成し、これらがそれを使用できるように構成しました:BCJ1

Host J1
    HostName 123.123.123.123
    User ciprian

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

現在、2 番目の JumpHost をセットアップしており、またはのJ2いずれかを介して同じマシンに接続したいと考えています。マシンの名前に が含まれている場合は を介し​​てジャンプし、 が含まれている場合は を介し​​てジャンプするように構成ファイルを記述する方法はありますか? もちろん、正確な一致を手動で指定する必要はありません :)J1J2J1J1J2J2

設定は次のように記述できます:

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

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

したがって、 を指定するssh A-J1と、J1 をジャンプする設定が選択されます。ただし、 に関連する定義を解析するときに、が に解決されるため、A*を指定できなくなり、 を に解決するようにしたいと思います。HostName%hA-J1A

と を使用すると、何らかの魔法が実現できると信じていますCanonicalizeHostNameCanonicalizePermittedCNAMEs、その方法がわかりません。

答え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"'

関連情報