使用通配符和DRY进行SSH配置文件设置

Kar*_*k T 4 ssh config 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
Run Code Online (Sandbox Code Playgroud)

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

Host *.xyz.com 在最后一个用例调试之后,这是最近添加的,这似乎打破了前2个.

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

Kar*_*k T 8

除了弄清楚配置为什么"破坏"之外,我发现了一个新的指令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
Run Code Online (Sandbox Code Playgroud)

这个配置完全符合我的需要.我需要使用Host而不是Hostname在比赛中,因为它似乎没有接受,HostnameHost似乎正是我需要的.

我有任意行为,因为我错过了Hostname以前无法使用的内容,作为过滤器或匹配语句.它只能在a中使用Host,或者Match因此隐含在最后一个Host语句之下.