用 ssh-keygen -R 删除 known_hosts 中的主机密钥
服务器重装或更换 IP 后删除过期的 SSH 主机密钥,正确修复中间人警告而不破坏 known_hosts 其他条目。
执行 ssh-keygen -R example.com 删除该主机的全部已存密钥;非默认端口需写成 ssh-keygen -R "[example.com]:2222"。
01命令
命令
$ ssh-keygen -R example.com
ssh-keygen -R "[example.com]:2222" # non-default port02作用说明
重装服务器后,SSH 会因旧密钥仍留在 ~/.ssh/known_hosts 而报“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”并拒绝连接。ssh-keygen -R 能安全删除匹配行——包括散列后的主机名条目,并自动写备份文件,这是手工编辑做不到的。方括号端口语法很关键:非 22 端口的主机在 known_hosts 中以 [host]:port 形式作为键。
03风险
!注意: 只有在明确知道密钥为何变化(自己的重装、有记录的迁移)时才执行此操作;来历不明的主机密钥变更可能是中间人攻击。
04撤销
✓无需撤销——该命令不会改变持久状态。
05来源
- ssh-keygen(1) — Linux manual page依据: ssh-keygen man page: '-R hostname Removes all keys belonging to hostname from a known_hosts file' including hashed-hostname support.
- Arch Wiki: OpenSSH依据: Documents the changed-host-key error after server reinstall and using ssh-keygen -R to fix it.
最后验证: 2026-09-17 · 分类: 安全与隐私