.ssh/config 如何让 Match 在一行中匹配多个主机名

.ssh/config 如何让 Match 在一行中匹配多个主机名

我正在尝试设置我的.ssh/config,以便它仅ProxyCommand在无法到达本地服务器时使用。然而,我正在努力使Match

例如。我有

Match host="X" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

Match host="Y" !exec "is_reachable Y" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes
...

X并且Y位于同一网络上,因此如果其中一个可以访问,则另一个也可以访问。我真的不需要is_reachable改变这个论点。理想情况下,我想要这样的东西:

Match host="X Y" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

这与X和都匹配Y。我有大约 15 个主机名,我不想为所有主机名制定单独的规则。

我见过类似的解决方案仅将匹配关键字应用于 ssh 配置中的单个主机但它们只处理单个主机。

答案1

我知道这是一个两年前的问题,但我今天试图找到这个答案并且做到了。查遍之后,发现里面说的很清楚了文档(至少是当前版本)。

其他关键字的条件必须是单个条目或逗号分隔的列表,并且可以使用模式部分中描述的通配符和否定运算符。

所以我现在使用Match这样的线路,而且效果很好:

Match host prefix1*,prefix2*,prefix3*
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

确保不要用逗号和空格(仅逗号)分隔主机模式。

关键字有很大的力量Match。这可以通过我的用例来展示,该用例进一步扩展了一点。我需要执行一个“前脚本”以确保我的本地环境已针对请求正确设置,因此我将条件关键字originalhostexec.我只需确保我的脚本返回0响应代码,以便主机匹配originalhosts条件不会Match因我的exec脚本而失败。

Match originalhost prefix1*,prefix2*,prefix3* exec ~/.ssh/pre_script
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

我正在使用以下版本编写所有这些内容(如 ssh -v 输出顶部所示):

OpenSSH_9.0p1, LibreSSL 3.3.6

相关内容