在检查远程服务器的 ECDSA 密钥时,SSH 客户端似乎正在检查“/dev/null”而不是“known_hosts”文件

在检查远程服务器的 ECDSA 密钥时,SSH 客户端似乎正在检查“/dev/null”而不是“known_hosts”文件

我想知道为什么known_hosts在使用 SSH 时我的文件似乎没有被正确检查。简而言之,我的猜测是我的 SSH 客户端正在检查/dev/null而不是known_hosts文件。关于我如何猜测的详细信息写在下面。

对于我的示例,我从名为 的节点登录mars到名为 的客户端节点saturnsaturn设置公钥和私钥后我可以进入,但我收到此警告:

root@mars# ssh saturn
Warning: Permanently added 'saturn,10.30.3.3' (ECDSA) to the list of known hosts.

当我注销并登录到同一saturn节点时,我收到了相同的警告消息。无论我注销并重新登录多少次,我都会收到此消息。我不想压制警告。我想知道为什么这个警告不断出现。我通过执行以下操作检查了节点known_hosts中的文件是否mars具有saturn的 ECDSA 密钥,但出现错误:

# ssh-keygen -F saturn
do_known_hosts: hostkeys_foreach failed: No such file or directory

我想知道known_hosts使用 SSH 客户端时是否未正确检查文件,因此使用详细标志登录以检查哪里出了问题。以下是截断的输出:

root@mars# ssh -vvv saturn
.
.(truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:nkvxyuLtlDdO8pAycafcfqSPE7OUWgN6Z++Aia/Cygg
debug3: hostkeys_foreach: reading file "/dev/null"
debug3: hostkeys_foreach: reading file "/dev/null"
Warning: Permanently added 'saturn,10.33.3.3' (ECDSA) to the list of known hosts.
.
.(truncated)

所以,我的 SSH 客户端似乎mars正在寻找/dev/null已知的主机密钥,而不是/root/.ssh/known_hosts.

我想看看什么是“好的”行为,所以我在另一对服务器(此处名为earthneptune)上使用 SSH,我已经知道这对服务器不会向我提供该Warning: Permanently added消息。我已经打开了详细程度,并且只显示了日志消息的一部分。从 登录 到earth给出neptune

root@earth# ssh -vvv neptune
.
. (truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:qo7vcBwG53p/9MlaTIQJbMZ8Wgf6QxiCJLR1jUiblQ8
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:9
debug3: load_hostkeys: loaded 1 keys from saturn
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:3
debug3: load_hostkeys: loaded 1 keys from 10.33.9.10
debug1: Host 'neptune' is known and matches the ECDSA host key.
debug1: Found key in /root/.ssh/known_hosts:9
.
.(truncated)

从上面,我可以看到earth正确检查/root/.ssh/known_hostsknown_hosts在这个“好”场景中找到密钥的另一个确认:

root@earth# ssh-keygen -F neptune
# Host neptune found: line 7 

总之,有谁知道为什么该Warning消息不断出现,以及 SSH 客户端是否确实在检查/dev/null而不是known_hosts如果我的猜测是正确的,如何修复客户端以使该消息不再出现?

我在所有节点上使用 Ubuntu 18.04 和此 SSH 客户端版本:

root@mars:~# ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017

预先感谢您的任何帮助。

答案1

我想到的唯一解释是SSH 客户端配置此计算机或此帐户已被修改为不记住文件中的已知公钥known_hosts。检查、GlobalKnownHostsFileUserKnownHostsFile中和的设置。/etc/ssh/ssh_config/etc/ssh/ssh_config.d/*~/.ssh/config

这样做可能是为了增加隐私,以便计算机上的其他管理员(或将来设法破坏计算机或其备份的人)无法看到您连接到的位置,除非他们监视连接。对于known_hosts文件来说,这并不是隐私和安全之间的一个很好的妥协:每次都必须手动检查对等方的公钥,很容易出错(而且不方便)。打开该HashKnownHosts选项可以提供相当多的隐私和相当多的功能:打开此选项后,不可能直接列出文件中的条目known_hosts,您所能做的就是猜测该条目可能是什么并检查您的猜测(并且每次检查的成本都很高,因此您无法暴力破解大量潜在的服务器名称)。

相关内容