SSH配置文件设置使用通配符和DRY
问题描述:
我的要求如下SSH配置文件设置使用通配符和DRY
- 我们所有的云机器需要相同的配置(用户,端口,IdentityFile)
- 我需要这些设置应用到他们基于域(* .xyz.com)
- 我还需要应用这些设置,当我设置短主机(见下文)
我现在的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
无法像以前一样使用,作为过滤器或匹配类似语句。它只能用在Host
或Match
之内,因此隐含在最后的Host
声明之下。
我认为发生了“破坏”,因为'Hostname'不能用于我所假设的方式。只有主机可以用作块,并且一旦我在第一个和普通之间添加了另一个主机,它们就被禁用了。 –