是否可以从 SSH 的 known_hosts 文件中删除特定的主机密钥?

是否可以从 SSH 的 known_hosts 文件中删除特定的主机密钥?

是否可以从 SSH 的 known_hosts 文件中删除特定的主机密钥?

我通常会删除整个known_hosts文件,这样做没有任何问题,但出于好奇,是否可以只删除一个条目?

我打开了该known_hosts文件,但却无法理解其内容。

以下是我收到的消息,促使我提出这个问题:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.

答案1

使用此命令从 known_hosts 中删除条目:

ssh-keygen -R hostname

或者主机 IP 是否可用

ssh-keygen -R <Host_IP>

答案2

是的,您只能删除一个键。只需在编辑器中打开它并删除有问题的行即可。错误消息中冒号后面的数字是行号,因此这就是要删除的行——示例中的第 1 行。

答案3

我最近才开始使用主机密钥,但当我弄乱它们时,通常每行一个密钥,因此请备份文件并一次删除一个密钥,直到找到正确的密钥。然后再添加其他密钥。这有点长,但应该可行。

同样基于该错误,并且不知道是什么,它可能是文件中的第一个主机密钥有问题,因此使用 vim 打开该文件

vim ~/.ssh/known_hosts

并击中

dd

然后保存。

答案4

使用 ssh-keygen -R hostname 并不总是有效。如果您有较新版本的 SSH,它会“隐藏”主机名以防止 ssh-agent 劫持,显然 ssh-keygen 无法对主机名进行哈希解密。

例如,我有一个名为 build-node-01 的主机,我已连接到它并接受了密钥。然后我从头开始重建它,获取新的主机指纹,并尝试重新连接,我会收到一条警告,提示第 X 行(例如第 3 行)存在冲突。我运行ssh-keygen -R hostname,但下次尝试连接时,我仍然收到一条警告,提示存在冲突。我检查了文件,结果发现主机名已散列,显示为 ,[1] Bu4Ch@R@4D0M57uFF而不是可读的主机名。

在这种情况下,成功删除有问题的主机的唯一方法是使用

sed -i 'xd' ~/.ssh/known_hosts

为了让这个 sed 更进一步,您可能希望备份 known_hosts,以防您删除了错误的行,在这种情况下,只需将 .bak(或任何扩展名)添加到 -i 选项即可创建具有该扩展名的备份。使用 ssh-keygen 会自动执行此操作。

sed -i.bak 'xd' ~/.ssh/known_hosts

相关内容