是否可以从 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