-R 参数用于从 known_hosts 文件中安全移除指定主机的 SSH 密钥记录,支持域名、IP、端口及 IPv6 格式,不改动文件其他内容;例如 ssh-keygen -R example.com。

使用 ssh-keygen -R 可以直接从 ~/.ssh/known_hosts 中删除指定主机的旧指纹记录,避免因密钥变更导致的连接警告或拒绝。
什么是 -R 参数的作用
ssh-keygen -R 用于从 known_hosts 文件中移除匹配的主机条目,支持主机名、IP 地址甚至带端口的格式(如 [example.com]:2222)。它不修改其他行,也不影响文件权限和结构,是安全清理的首选方式。
常用清理场景与写法
- 清理普通域名主机:
ssh-keygen -R example.com - 清理带端口的 SSH 服务:
ssh-keygen -R [192.168.1.100]:2222 - 清理 IPv6 地址:
ssh-keygen -R "[2001:db8::1]" - 清理已知的别名或 Host 别名(需确保 known_hosts 中记录的是该别名):
ssh-keygen -R myserver
配合 SSH 连接自动处理(可选增强)
如果频繁遇到密钥变更(如测试环境重装系统),可在 SSH 命令中临时跳过检查并自动更新:
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
- 先删旧记录:
ssh-keygen -R myhost - 再连接并接受新指纹:
ssh -o StrictHostKeyChecking=accept-new user@myhost
注意:accept-new 模式只在 host key 不存在时自动添加,不会覆盖已有不同密钥,比 no 更安全。
验证是否清理成功
执行后可用以下命令确认目标主机条目已消失:
-
grep -n "example.com" ~/.ssh/known_hosts(应无输出) -
ssh-keygen -F example.com -f ~/.ssh/known_hosts(返回 “No matching entry found”)
若仍提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”,说明未清干净,可能用了别名、IP 或哈希格式存储,需用 -F 定位后再 -R 删除。

















