如何为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范围的巧妙脚本编写技巧?

Answers:


24

与ssh_config文件中的模式进行匹配是作为基本模式进行匹配,而不是作为网络/ 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?.*"

4
确切地说,这不是正则表达式,而是通配符。
加博·加拉米

1
感谢您的回答,它几乎对我有用,但是我实际上需要用单独的host条目来区分这两个范围。它还需要将每个引用单独引用(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.*"
fazy

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.