用 ssh-keygen -R 删除 known_hosts 中的主机密钥

服务器重装或更换 IP 后删除过期的 SSH 主机密钥,正确修复中间人警告而不破坏 known_hosts 其他条目。

LinuxSSH 远程连接known_hosts 主机密钥ssh-keygen 密钥生成低风险
执行 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 port

02作用说明

重装服务器后,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
    man7.org · technical · 2026-09-17
    依据: ssh-keygen man page: '-R hostname Removes all keys belonging to hostname from a known_hosts file' including hashed-hostname support.
  • Arch Wiki: OpenSSH
    Arch Linux · community · 2026-09-17
    依据: Documents the changed-host-key error after server reinstall and using ssh-keygen -R to fix it.

最后验证: 2026-09-17 · 分类: 安全与隐私