使用通配符和DRY

时间:2016-07-05 03:30:23

标签: ssh config dry

我的要求如下

  1. 我们所有的云计算机都需要相同的配置(用户,端口,IdentityFile)
  2. 我需要根据域(* .xyz.com)
  3. 将这些设置应用于它们
  4. 我还需要在设置短主机时应用这些设置(见下文)
  5. 我目前的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是最近添加的,这似乎打破了前两个。

    这是正确的方式还是有更简洁的方式?

1 个答案:

答案 0 :(得分:7)

除了找出配置为什么"打破"之外,我发现了一个新的指令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语句之下。