OpenSSH 7.6 多个主机条目不匹配

OpenSSH 7.6 多个主机条目不匹配

我在全新安装的 Ubuntu 16.04 上使用 OpenSSH 7.6p1 时遇到了问题(这个问题在我之前的 Ubuntu 上不存在,我从中复制了配置文件。不幸的是,那个操作系统已经被毁了)

我正在尝试关闭对特定域集的严格主机密钥检查(在下面的示例中,任何匹配的内容*.mydomain.com)。/etc/ssh/ssh_config已完全注释掉。我有一个配置文件,~/.ssh/config其内容等同于以下内容:

Host                       *.mydomain.com
StrictHostKeyChecking      no
UserKnownHostsFile         /dev/null

Host                       foo
HostName                   myserver.mydomain.com
PasswordAuthentication     yes
User                       myuser

现在,当我执行时ssh foo,我希望它将别名为[email protected],意识到它不应该执行StrictHostKeyChecking,要求我输入密码并且(当输入正确的密码时)将新的主机密钥条目写入/dev/null(当然,这本质上是一个 NOP)。

但是,当我ssh foo在系统上执行时,它会使用别名并尝试使用正确的用户连接到正确的服务器(这意味着它正在读取我的配置文件,否则它不知道“foo”是什么),但会给我一个主机密钥验证错误(否则它是正确的,因为主机密钥在 known_hosts 中是错误的)。如果我从 known_hosts 中删除有问题的密钥并重试,它会将新的主机密钥写入 known_hosts 而不是 /dev/null。本质上,这就像我的配置文件中的第一个节被忽略了。

这是我的配置问题吗?还是这是一个已知问题?任何帮助都将不胜感激。

答案1

SSH 仅搜索配置文件一次以查找选项。因此,它会使用主机名参数foo查找所有匹配的部分,然后将它们合并在一起。

它不会再通过配置再次寻找基于将要连接的最终主机名/地址的新配置。

因此,“问题”只是您期望 ssh 的工作方式与实际工作方式不同。对此深表歉意。有时我也希望它能按照您希望的方式工作。

我所能建议的就是安装大多数 shell 都提供的自动完成功能。这样,您就不必为 指定别名,只需为指定foo别名,它就会自动完成为。foo.mydomain.comfoo<tab>myserver.mydomain.com

相关内容