清理旧ssh密钥需彻底擦除私钥、清除所有位置的公钥并更新服务端配置:linux用shred -u、macos用srm -s安全删除私钥;逐项清理~/.ssh/authorized_keys、/etc/ssh/sshd_config及ca相关配置;刷新known_hosts;最后验证新密钥并加固服务端。

清理旧 SSH 密钥不是删掉文件就完事,关键在防止残留私钥被恢复、避免信任关系失控。重点是:擦除私钥要彻底、公钥要从所有可信位置移除、服务端配置需同步更新。
彻底擦除本地旧私钥
rm 命令只是删除文件引用,磁盘数据仍可恢复。对 ~/.ssh/id_rsa、~/.ssh/id_ed25519 等私钥文件,必须用安全擦除工具:
- 使用 shred -u ~/.ssh/id_rsa(Linux)——默认三次覆写,真正清除磁盘数据
- macOS 用户可用 srm -s ~/.ssh/id_ed25519 实现单次安全擦除
- 擦除前确认该密钥已不再用于任何服务器登录,否则会导致连接中断
清理服务端残留公钥
旧密钥的公钥可能散落在多处,需逐项检查并清理:
- 用户主目录:~/.ssh/authorized_keys —— 删除对应公钥行(可用 grep -n "old_key_comment" 查定位)
- 系统级配置:/etc/ssh/sshd_config 中若配置了 AuthorizedKeysCommand,需检查其调用脚本是否缓存旧密钥
- 若启用 SSH CA 模式,旧证书无需手动删,但需确认其已过期或被列入 /etc/ssh/revoked_keys
刷新客户端已知主机记录
当远程主机重装系统或更换密钥后,客户端会因指纹不匹配拒绝连接。这不是密钥问题,而是 known_hosts 缓存冲突:
- 执行 ssh-keygen -R 192.168.1.203(替换为目标 IP)自动移除对应条目
- 也可手动编辑 ~/.ssh/known_hosts,删除含该 IP 的整行(注意行号可能偏移)
- 批量清理多个主机时,可用 ssh-keygen -R -f ~/.ssh/known_hosts 配合 IP 列表脚本处理
验证与后续加固
清理完成后,务必验证新密钥是否生效,并堵住旧路径复用漏洞:
- 用新密钥登录测试:ssh -i ~/.ssh/id_ed25519 user@host
- 检查服务端 /etc/ssh/sshd_config 是否已禁用密码登录:PasswordAuthentication no
- 确认只允许必要用户:AllowUsers deploy admin,且 PermitRootLogin no
- 若曾用旧密钥登录过其他设备(如跳板机、CI/CD 服务),需同步清理那些位置的 authorized_keys











