我在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文件来查找选项。 所以它需要主机名参数foo
find所有匹配的部分,然后将它们合并在一起。
它不会再通过configuration再次返回,根据将要连接到的最终主机名/地址寻找新的configuration。
所以这个“问题”只不过是你希望ssh的工作方式不同而已。 对于那个很抱歉。 有时候我希望它能像你希望的那样工作。
关于我能build议的一点是,你安装了大多数shell可用的自动完成function。 因此,而不是有一个别名为foo
你有一个别名foo.mydomain.com
只需键入foo<tab>
,它会自动完成到myserver.mydomain.com
。