我的里面有类似的东西~/.ssh/config
:
Host foo
Hostname foo001.a.b.c.d
Host bar
Hostname foo011.a.b.c.d
Host *.a.b.c.d
ProxyCommand ssh -A -l sds XXX.YYY.ZZZ.TTT nc %h %p
Host *
ForwardAgent yes
当我这样做时,ssh -vvv foo
我看到的是:
$ ssh -vvv foo
debug1: /.../.ssh/config line 36: Applying options for foo
debug1: /.../.ssh/config line 50: Applying options for *
为什么ProxyCommand
不应用该选项?
那里Host
匹配。Hostname
foo
有没有办法做我想做的事情,即将短名称映射到 FQDN,然后单独处理它们?
答案1
因为该Host
选项如手册页中所述:
主机通常是命令行中给出的主机名参数(有关例外情况,请参阅 CanonicalizeHostname 选项。)
默认情况下不会重新解析配置。如果您想要匹配修改后的主机名,则应尝试使用Match
关键字,这可以为您提供更多灵活性。您可以通过将其与 结合来实现您想要的效果CanonicalizeHostname
。
答案2
似乎在主机名更改后重新应用规则是无意中添加到 OpenSSH 中的,然后后来又恢复了(请参阅错误 #2267);当前版本仅在启用主机名规范化时才会执行此操作。(有点烦人的是,更宽松的版本至少包含在 Ubuntu 14/15 中,因此将它们更新到 16 可能会破坏您的 SSh 配置。)
一个有点肮脏的解决方法是设置
Host *
CanonicalizeHostname yes
CanonicalizeMaxDots 0
这实际上不会进行任何规范化,但将允许重新读取配置文件,从而使您的示例起作用。