SSH配置文件设置通配符和DRY



我的要求如下

  1. 我们所有的云机器需要相同的配置(用户,端口,IdentityFile)
  2. 我需要这些设置应用到他们基于域(*.xyz.com)
  3. 当我设置短主机时,我也需要应用这些设置(见下文)

我当前的SSH配置是一个

Host shortname1?
    Hostname %h.prod.xyz.com
Host test-myname
    Hostname combo.test-myname.xyz.com
Host *.xyz.com
    Hostname %h
Hostname *.xyz.com
    User myuser
    Port 12345
    IdentityFile ~/.ssh/id_rsa

确切的用例是ssh shortname1a; ssh shortname1b; ssh test-myname; ssh combo.test-myname.xyz.com

Host *.xyz.com是最近在调试最后一个用例后添加的,这似乎在某种程度上破坏了前2。

这是正确的方法还是有更整洁的方法?

在弄清楚为什么配置是"打破",我发现了一个新的指令Match。这让我可以做我想做的

Host shortname1?
    Hostname %h.prod.xyz.com
Host test-myname
    Hostname combo.test-myname.xyz.com
Host *.xyz.com
    Hostname %h
Match Host *.xyz.com
    User myuser
    Port 12345
    IdentityFile ~/.ssh/id_rsa

这个配置正是我所需要的。我需要在比赛中使用Host而不是Hostname,因为它似乎不接受Hostname,但Host似乎正是我所需要的。

我有任意的行为,因为我误解了Hostname不能像我以前使用的那样使用,作为过滤器或匹配语句。它只能在HostMatch中使用,因此,它隐式地位于最后一个Host语句的下面。

最新更新