我想在 SSH 配置中使用通配符,以便将某个域上所有主机的默认用户名设置为特定值。但我还想为某些特定主机设置一些短名称。我期望这样的操作能够奏效:
Host *.mydomain.com
User myusername
Host host1
Hostname host1.mydomain.com
使用这些设置,如果我输入,ssh host1.mydomain.com
它会计算为[email protected]
,但如果我输入,ssh host1
它不会应用我的用户设置,而是看到[email protected]
。
有没有办法让通配符与最终扩展的主机名匹配,以便我可以输入短格式或长格式并获得相同的结果?
答案1
只需使用:
Host *.mydomain.com host1
User myusername
Host host1
Hostname host1.mydomain.com
- 替代模式由主持人线。
- 全部匹配主机模式被应用。
- 如果某个选项出现多次,则仅使用第一次出现的选项
答案2
您可以简单地设置CanonicalizeHostname
为yes
使用别名的规范主机名重新解析 ssh_config。例如:
CanonicalizeHostname yes
Host *.mydomain.com
User myusername
Host host1
HostName host1.mydomain.com
或者,如果您还想重新映射主机名,则可以使用Match
而不是 来Host
仅匹配规范主机名。例如,在:
Match canonical host="*.mydomain.com"
User myusername
Host host2.mydomain.com
HostName host2.otherdomain.com
当您连接到时,不会设置用户指令host2.mydomain.com
。
答案3
您可以将其%h
用作Host
HostName
.ssh/配置。
Host host?
User myusername
Hostname %h.mydomain.com
Host host??
User myusername
Hostname %h.mydomain.com
Host host???
User myusername
Hostname %h.mydomain.com
现在你可以这样做:
ssh host1
代替ssh host1.mydomain.com
ssh host10
代替ssh host10.mydomain.com
ssh host100
代替ssh host100.mydomain.com
答案4
以上方法都不适用于我。我需要以下配置
Host *.mydomain.com
User myusername
Host host1
CanonicalizeHostname yes
Hostname host1.mydomain.com