SSH構成ホストエントリのCIDR範囲を一致させるにはどうすればよいですか?


22

特定のCIDRブロックを使用して、SSHクライアント構成(通常~/.ssh/config)のホストと一致させる方法を探しています。たとえば、IPが特定の範囲に該当する場合、要塞ホストを介してすべてのトラフィックを転送するエントリがあります10.1.0.0/16

host 10.1.*
    proxycommand ssh -q bastion -W %h:%p

これは非常にうまく機能しますが、ドット表記に正確に合わない範囲を追加するとどうなりますか?

# doesn't work, unfortunately
host 10.2.0.0/18
    proxycommand ssh -q bastion-foo -W %h:%p
host 10.2.64.0/18
    proxycommand ssh -q bastion-bar -W %h:%p

マニュアルに私が見逃しているもの、またはこれらのホストIP範囲の一致を可能にする巧妙なスクリプトトリックはありますか?

回答:


24

ssh_configファイルのパターンに対するマッチングは、ネットワーク/ CIDRマッチングとしてではなく、基本的なパターンマッチングとして行われます。そのため、CIDR表記を使用しても機能しません。

manページには、その説明しています。

パターンは、ゼロ個以上の非空白文字、*(ゼロ個以上の文字に一致するワイルドカード)、または?(1文字のみに一致するワイルドカード)で構成されます。

最善の方法は、複数のパターンのリストを使用することです。繰り返しますが、マニュアルページから:

パターンリストは、パターンのカンマ区切りリストです。パターンリスト内のパターンは、それらの前に感嘆符(!)を付けることにより無効にできます。

したがって、2つの/ 18ネットをカバーするには、以下をリストする必要があります。

  • 一致するすべてのホスト10.2.?.*(つまり10.2.0.0–10.2.9.255)
  • 一致するすべてのホスト10.2.??.*(10.2.10.0〜10.2.99.255)
  • 一致するすべてのホスト10.2.10?.*(10.2.100.0〜10.2.109.255)
  • 一致するすべてのホスト10.2.11?.*(10.2.110.0〜10.2.119.255)
  • 一致するすべてのホスト10.2.12?.*に一致するものを除く10.2.128.*10.12.129.*(および除外は最初に来なければならないことを忘れないでください!)

パターンリストは次のようになります。

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"

4
正確には、これは正規表現ではなく、グロビングワイルドカードです。
ガボールガラミ

1
答えてくれて、それは私にはほとんど効果がありますが、実際には別々のhostエントリでこれらの2つの範囲を区別する必要がありました。また、それぞれを個別に引用する必要がありました(ssh / Mac)。私が見つけることができる最短: host "10.2.?.*", "10.2.??.*", "!10.2.64*", "!10.2.65*", "!10.2.66*", "!10.2.67*", "!10.2.68*", "!10.2.69*", "!10.2.7*", "!10.2.8*", "!10.2.9*" および host "10.2.??.*", "10.2.10?.*", "10.2.11?.*", "10.2.12?.*", "!10.2.1?.*", "!10.2.2?.*", "!10.2.3?.*", "!10.2.4?.*", "!10.2.5?.*", "!10.2.60.*", "!10.2.61.*", "!10.2.62.*", "!10.2.63.*", "!10.2.128.*", "!10.2.129.*"
ファジー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.