2016-07-05 107 views
1

我的要求如下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

这是正确的方式或有一个更好的方法?

+0

我认为发生了“破坏”,因为'Hostname'不能用于我所假设的方式。只有主机可以用作块,并且一旦我在第一个和普通之间添加了另一个主机,它们就被禁用了。 –

回答

3

除了弄清楚为什么配置“突破”,我发现了一个新的指令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声明之下。