有没有办法在 SSH 配置中存在主机名规范化的情况下使覆盖主机限制声明起作用?

有没有办法在 SSH 配置中存在主机名规范化的情况下使覆盖主机限制声明起作用?

我喜欢安全性,所以我的 SSH 配置默认设置为坚持使用现代 MAC。但我的公司内部网上有一些相当老旧的服务器,不支持这些 MAC。所以对于这些,我有一个例外。我还喜欢在 SSHing 时能够通过其非限定主机名引用服务器,所以我配置了主机名规范化。

我的 SSH 配置如下所示:

CanonicalizeHostname yes
CanonicalDomains intranet.initech.com

Host oldserver.intranet.initech.com
        MACs hmac-sha2-512,hmac-sha2-256,hmac-sha1

Host *
        MACs hmac-sha2-512,hmac-sha2-256

如果 i ssh newserver.intranet.initech.com,我将使用现代 MAC 进行连接。如果 i ssh oldserver.intranet.initech.com,我将使用旧 MAC 进行连接。如果 i ssh newserver,我将使用现代 MAC 进行连接。但如果 i ssh oldserver,则:

Unable to negotiate with 10.93.100.37 port 22: no matching MAC found. Their offer: hmac-md5,hmac-sha1,[...]

为什么?ssh -v讲述了这样一个故事:

debug1: Reading configuration data /home/tanderson/.ssh/config
debug1: /home/tanderson/.ssh/config line 30: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Canonicalized hostname "oldserver" => "oldserver.intranet.initech.com"
debug1: Re-reading configuration after hostname canonicalisation
debug1: Reading configuration data /home/tanderson/.ssh/config
debug1: /home/tanderson/.ssh/config line 20: Applying options for oldserver.intranet.initech.com
debug1: /home/tanderson/.ssh/config line 24: Applying options for *.intranet.initech.com
debug1: /home/tanderson/.ssh/config line 30: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *

发生了什么事?嗯,正如文档所述:

对于每个参数,将使用第一个获得的值。

和:

规范化主机名

如果启用此选项,则使用新的目标名称再次处理配置文件,以在匹配的主机和匹配节中获取任何新配置。

因此Host *总是优先应用于任何针对规范化主机名的主机特定配置。

如果我理解正确的话,我认为主机名规范化基本上已经被破坏,或者至少受到了严重阻碍。

有什么办法可以解决这个问题吗?

我正在使用 OpenSSH_7.6p1,因为我使用的是 Ubuntu 18.04.6。

相关内容