最初の一致でssh構成を停止する


18

.ssh構成ですべてのホストのローカルプロキシを追加しましたが、proxyコマンドを使用せずにローカルvmにシェルする必要があります。私のssh試行の出力:

debug1: /Users/bbarbour/.ssh/config line 1: Applying options for local.dev
debug1: /Users/bbarbour/.ssh/config line 65: Applying options for *

次のssh構成が与えられた場合、ProxyCommandがlocal.devエントリに適用されないようにするにはどうすればよいですか?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

回答:


22

!前を使用して、ProxyCommandからlocal.devを除外できます。

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

ssh_configドキュメントから:

複数のパターンを指定する場合は、空白で区切る必要があります。

パターンエントリは、感嘆符( `! ')をプレフィックスとして付けることで無効にできます。否定されたエントリが一致する場合、行の他のパタ​​ーンが一致するかどうかに関係なく、ホストエントリは無視されます。そのため、ワイルドカード一致の例外を提供するには、一致の否定が役立ちます。

ドキュメントには次のようにも書かれています。

各パラメーターについて、最初に取得された値が使用されます。構成ファイルには、「ホスト」仕様で区切られたセクションが含まれており、そのセクションは仕様で指定されたパターンのいずれかに一致するホストにのみ適用されます。一致するホスト名は、コマンドラインで指定されたものです。

そのため、次で定義したオーバーライド値によってlocal.devのProxyCommandを無効にすることもできますHost *

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none

8

構成ファイルのオプションは、最初に一致したときに適用されます。ホストエントリにProxyCommandがないため、エントリのProxyCommand *が使用されます。

これを回避するには2つの方法があります。

  • proxyコマンドを使用したくないホストの場合は、次の行を追加するだけです
    ProxyCommandなし
  • *エントリについては、エントリlocal.devを無効にしてホストに適用すべきではないことに特に注意してください。!
    ホスト!local.dev *

複数のホストを分離するには、スペースを使用します。カンマ(、)は私にはうまくいきませんでした。ディストリビューターID:Ubuntu説明:Ubuntu 17.10リリース:17.10コードネーム:artful
Aruna

@ArunaFromLKに感謝します-私はそれを見逃したとは信じられません。今すぐ答えを更新しました。
ジェニーD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.