OpenSSH 7.6多个主机条目不匹配

我在OpenSSH 7.6p1上安装了一个全新的Ubuntu 16.04(这个问题在我之前的Ubuntu上是不存在的,我从中拷贝了configuration文件,不幸的是,这个操作系统已经被销毁了)

我试图closures严格的主机密钥检查一组特定的域(在下面的例子中,任何匹配*.mydomain.com )。 /etc/ssh/ssh_config被完全注释掉了。 我在~/.ssh/config中有一个configuration文件,等同于:

 Host *.mydomain.com StrictHostKeyChecking no UserKnownHostsFile /dev/null Host foo HostName myserver.mydomain.com PasswordAuthentication yes User myuser 

现在,当我执行ssh foo ,我希望以别名[email protected] ,意识到它不应该执行StrictHostKeyChecking,问我一个密码和(当input正确的密码时),写一个新的主机键入/dev/null (其中,ofc基本上是一个NOP)。

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

这是我的configuration问题,或者这是一个已知的问题或什么? 任何援助将不胜感激。

SSH只search一次configuration文件来查找选项。 所以它需要主机名参数foofind所有匹配的部分,然后将它们合并在一起。

它不会再通过configuration再次返回,根据将要连接到的最终主机名/地址寻找新的configuration。

所以这个“问题”只不过是你希望ssh的工作方式不同而已。 对于那个很抱歉。 有时候我希望它能像你希望的那样工作。

关于我能build议的一点是,你安装了大多数shell可用的自动完成function。 因此,而不是有一个别名为foo你有一个别名foo.mydomain.com只需键入foo<tab> ,它会自动完成到myserver.mydomain.com