.ssh/config 1行に複数のホスト名を一致させる方法

.ssh/config 1行に複数のホスト名を一致させる方法

ローカルサーバーに接続できない場合.ssh/configにのみ有効にしようとしています。ProxyCommandしかし、作ろうとしています。Match

例えば。私は持っています

Match host="X" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

Match host="Y" !exec "is_reachable Y" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes
...

XY同じネットワーク上にあるため、一方がアクセス可能であれば、もう一方もアクセス可能です。私は実際にis_reachableこの主張を変える必要はありません。理想的には、次のようなものが欲しいです。

Match host="X Y" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

これはXとの両方と一致しますY。私は約15のホスト名を持っており、すべてのホスト名に対して別々のルールを持たせたくありません。

同様の解決策を見たことがありますSSH構成の個々のホストにのみ一致するキーワードを適用するしかし、彼らは単一のホストだけを扱います。

ベストアンサー1

2年前の質問なのは分かりましたが、今日この答えを見つけようと努力してやりました。検索してみると非常に明確であることがわかりました。文書(少なくとも現在のバージョン)。

他のキーワードの条件は、単一項目またはカンマ区切りリストでなければならず、パターンセクションで説明されているように、ワイルドカードおよび否定演算子を使用できます。

だから私は今、Match次のような行を使用するのに最適です。

Match host prefix1*,prefix2*,prefix3*
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

ホストパターンをコンマとスペースで区切らないでください(コンマのみ)。

キーワードには多くの力がありますMatch。これは、より拡張されたユースケースで実証できます。自分のローカル環境が要求に対して正しく設定されていることを確認するために「事前スクリプト」を実行する必要があるため、条件付きキーワードとをoriginalhost入力してホストが応答コードをexec返すことを確認するだけです。スクリプトの失敗により0一致originalhosts条件は変更されません。Matchexec

Match originalhost prefix1*,prefix2*,prefix3* exec ~/.ssh/pre_script
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

私は次のバージョンを使ってこれらすべてを書いています(ssh -v出力の上部に表示されます)。

OpenSSH_9.0p1, LibreSSL 3.3.6

おすすめ記事