ssh 配置选项不会递归应用

ssh 配置选项不会递归应用

我的里面有类似的东西~/.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匹配。Hostnamefoo

有没有办法做我想做的事情,即将短名称映射到 FQDN,然后单独处理它们?

答案1

因为该Host选项如手册页中所述:

主机通常是命令行中给出的主机名参数(有关例外情况,请参阅 CanonicalizeHostname 选项。)

默认情况下不会重新解析配置。如果您想要匹配修改后的主机名,则应尝试使用Match关键字,这可以为您提供更多灵活性。您可以通过将其与 结合来实现您想要的效果CanonicalizeHostname

答案2

似乎在主机名更改后重新应用规则是无意中添加到 OpenSSH 中的,然后后来又恢复了(请参阅错误 #2267);当前版本仅在启用主机名规范化时才会执行此操作。(有点烦人的是,更宽松的版本至少包含在 Ubuntu 14/15 中,因此将它们更新到 16 可能会破坏您的 SSh 配置。)

一个有点肮脏的解决方法是设置

Host *
  CanonicalizeHostname yes
  CanonicalizeMaxDots 0

这实际上不会进行任何规范化,但将允许重新读取配置文件,从而使您的示例起作用。

相关内容