当您知道主机密钥已更改时,是否有一种简便的方法来更新known_hosts中的信息?


38

如果主机的操作系统已重新安装并重新生成了其公共密钥,则锁定当然会失败,因为新密钥与旧密钥不匹配。

有没有一种简单的方法可以告诉ssh您知道主机的密钥已更改并且希望对其进行更新。我认为使用文本编辑器或类似sed之类的东西来删除有问题的代码有点容易出错。


在超级用户上重复了一个问题。在此处查看更详细的信息。
Yitz

Answers:


59

用于ssh-keygen -R hostname从您的known_hosts文件中删除主机名。下次连接时,新的主机密钥将添加到您的known_hosts文件中。


12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

下次连接时,由于密钥已经在文件中,因此您无需进行连接即可连接。Are you sure you want to continue connecting (yes/no)?known_hosts


1
另请参见〜/ .ssh / config中的StrictHostKeyChecking
Jeff Schaller

1
我会使用不同的变量名...。HOST在某些外壳程序中提供您自己的主机名,因此,我不希望更改它(我知道一个人可以随后退出,或者从子外壳程序执行此操作,但仍然,为什么不这样做thehost呢?或者什么。ALLCAPS变量可能会与保留的内部名称发生冲突。小写名称不应该发生冲突。)
Olivier Dulac

已知主机中的这些键以一些以| 1 |开头的东西为前缀。这些东西没有通过这种方法附加到文件中,还是我错了?那有什么区别,因为ssh-keyscan返回的内容不是以| 1 |开头。
丹尼尔·F

1
(@ DanielF +),如果您使用哈希格式并接受密钥ssh,则主机名及其地址有单独的条目,因此您应ssh-keygen -R 分别使用它们以避免冲突
dave_thompson_085
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.