
ローカルサーバーに接続できない場合.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
...
X
Y
同じネットワーク上にあるため、一方がアクセス可能であれば、もう一方もアクセス可能です。私は実際に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
条件は変更されません。Match
exec
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