我利用 .ssh/config 文件根据子域的特定部分适当地设置我的用户名,例如
Host *widgetshop.com*
User foobar
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
Host *
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
如果我这样写的话就会有效:
ssh foo.widgetshop.com
但如果我这样写就不起作用:
ssh foo
在搜索路径解析后,其变为相同的 fqdn。
有人有办法在调用 ssh 之前扩展短名称,或者有其他方法吗?
答案1
也许您可以使用以下host
命令:
ssh $(host -t A foo | cut -f1 -d" ")
将其放入 shell 脚本(将“foo”替换为“$1”)并执行 ssh。
答案2
从 OpenSSH 6.5 开始,您可以使用CanonicalizeHostname
ssh_config 中的选项执行此操作。以下示例应该可以满足您的要求:
CanonicalizeHostname yes
CanonicalDomains widgetshop.com
Host *.widgetshop.com
User foobar
答案3
ssh_config 手册页回答了这个问题:
主机是命令行中给出的主机名参数(即,在匹配之前,该名称不会转换为规范化的主机名)。
换句话说,它不起作用,因为它不以那种方式运作。
答案4
请参阅我的“替代方法”)
mbp:~ alexus$ grep f9 /etc/hosts
XX.XXX.XX.XXX f9
mbp:~ alexus$ ssh f9 hostname
f9.XXX.org
mbp:~ alexus$