.ssh/configの正規表現

.ssh/configの正規表現

qc01職場では、 - qc12hc01-hc10などの一般的な命名スキームに従うホストにログインする必要があることがよくあります。これはすべて私のラップトップで行う必要があります.ssh/config。もちろん、ホストqc*とエントリを使用できますが、hc*正規表現を使用できるかどうか疑問に思います。

答え1

〜のようにガロン宣言されたデフォルト値はssh_config正規表現をサポートしませんが、次のような他のアプローチを試すことができます。

答え2

でこれを行うことができますssh_config

IMO関連文書は読みやすく理解しにくい。私は13年以上のLinux使用経験を持っているので、これを理解していますssh。以下は文書の要約です。

  • man ssh_config説明しますMatch
  • execその後、任意のシェルコマンドを使用して一致を決定する機能があります。
  • 任意のシェルコマンドに入力引数を渡すことができ、次のセクションで説明します。TOKENS

私の場合、結局私~/.ssh/config:

Match exec "echo %h | grep -q 'NAME[0-9]\+$'"
    User USER
    IdentityFile /path/to/identity/file
    Hostname %h.fully.qualified.domain.name

テストはこのようなトリッキーな作業で行わなければなりません。このテストを実行するには、を呼び出しますssh -vvv HOSTNAME。これにより、正確に何が起こっているのか、新しいコンテンツがMatch正しく実装されているかどうかが表示されます。

答え3

PATTERNSのセクションを参照してくださいman ssh_config

ssh長い答えは次のとおりです。これをサポートするためにパッチを適用しなければできません。

答え4

Trevorの答えを拡張すると、次のようになります。

foo123.123マッチングやfoo10.101つのルールなど、より複雑なホストも可能です。いいえ使用されたホスト名を含むDNSエントリ:

Match exec "echo %h | grep -q 'foo[0-9]\+.[0-9]\+$'"
    Port 1234 # just to show it can be paired with non-default ports too,
              # see %p in man ssh_config
    ProxyCommand /usr/bin/nc 10.10.$(echo %h | sed -e 's/foo//') %p

ProxyCommandを使用して操縦する%hの内容はシェルに接続され、netcatを介して正しいポートに接続されます。これにより作成できます。基本ホストカテゴリに対して別々のエントリを作成する必要はありません。

関連情報