SSH known_hosts 中同一个公钥有多行?

SSH known_hosts 中同一个公钥有多行?

最近,过了一段时间,我尝试登录 LAN 上的 ssh 服务器,但收到以下警告:

$ ssh [email protected]
Warning: Permanently added the RSA host key for IP address '192.168.1.4' to the list of known hosts.

我查看了以下帖子:https://stackoverflow.com/questions/9299651/warning-permanently-added-to-the-list-of-known-hosts-message-from-git 但我不认为这是由于 ssh 客户端没有检查known_hosts文件造成的(我猜在我的情况下它会检查它,而且我没有运行 Windows)。

这是known_hosts文件,我发现有两行相同的公钥,但主机名/IP 不同:

$ cat ~/.ssh/known_hosts
local.server.hostname,192.168.1.3 ssh-rsa ...Here it goes the public key...
192.168.1.4 ssh-rsa ...Here it goes the same public key (as for the local.server.hostname,192.168.1.3 entry above)...

我确信这两个公钥是相等的(我已经使用命令检查了这两个公钥的指纹echo "here I pasted the public key" | base64 -D | md5,我对 known_hosts 的每个条目都运行了该命令)。否则,我会看到“警告:远程主机标识已更改”。

现在,我有一个带有 DHCP 的本地网络,因此服务器会被分配一个 IP,有时也会被分配一个不同的 IP。

我想这就是我收到此警告的主要原因:服务器 IP 已更改(从 192.168.1.3(known_hosts 的第一行)更改为 192.168.1.4),但由于公钥保持不变,并且公钥已被我的 ssh 客户端信任,因为 中已经有一个条目local.server.hostname,192.168.1.3,所以known_hostsssh 客户端向我显示了警告,但在192.168.1.4没有要求我确认的情况下添加了条目。

对吗?我唯一想到的是:为什么客户端添加了另一个条目,而不是直接修改已经存在的条目,例如以下方式:

local.server.hostname,192.168.1.3,192.168.1.4 ssh-rsa ...public key...

为什么同一个公钥会有两个条目?

答案1

确实,原因在于您的 DHCP 环境为您的服务器分配了一个新的 IP 地址。

每当 ssh 连接到其文件中没有的 IP 地址时,known_hosts它都会根据您的StrictHostKeyChecking配置做出反应,请参阅man ssh_config

 StrictHostKeyChecking
         If this flag is set to “yes”, ssh(1) will never automatically add host keys to the ~/.ssh/known_hosts file,
         and refuses to connect to hosts whose host key has changed.  This provides maximum protection against trojan
         horse attacks, though it can be annoying when the /etc/ssh/ssh_known_hosts file is poorly maintained or when
         connections to new hosts are frequently made.  This option forces the user to manually add all new hosts.  If
         this flag is set to “no”, ssh will automatically add new host keys to the user known hosts files.  If this
         flag is set to “ask”, new host keys will be added to the user known host files only after the user has con-
         firmed that is what they really want to do, and ssh will refuse to connect to hosts whose host key has
         changed.  The host keys of known hosts will be verified automatically in all cases.  The argument must be
         “yes”, “no”, or “ask”.  The default is “ask”.

如您所见,ssh 不会尝试将任何已知密钥匹配/更新到新 IP 地址(这可能被视为安全风险)。因此,不同的行将不同的 IP 地址与相同的主机密钥匹配。

如果 DHCP 服务器现在将旧地址分配给另一台服务器,而您尝试通过 ssh 连接到该服务器,则该服务器可能会使用不同的主机密钥,并且 ssh 连接将被拒绝。为了避免这种情况,您可能需要检查是否可以切换到静态分配的 IP 地址(某些 DHCP 服务器本身提供对静态映射的支持,而客户端无需进行任何更改)。

相关内容