如何匹配SSHconfiguration主机条目的CIDR范围?

我正在寻找一种方法来使用特定的CIDR块来匹配SSH客户端configuration中的主机(通常是~/.ssh/config )。 例如,如果IP属于一定的范围,我有一个条目来转发通过堡垒主机的所有stream量,假设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范围?

与ssh_config文件中的模式匹配是作为基本模式匹配完成的,而不是作为networking/ CIDR匹配。 所以使用CIDR表示法是不行的。

手册页解释说:

模式由零个或多个非空白字符组成, * (匹配零个或多个字符的通配符)或? (完全匹配一个字符的通配符)。

你可以做的最好的是使用一个以上的模式列表。 再次,从手册页:

模式列表是逗号分隔的模式列表。 模式列表中的模式可能会被前面的感叹号( ! )所取代。

所以要覆盖你的两个/ 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?.*"