警告表明服务器公钥变更,需按四步排查:先查known_hosts是否存在旧记录;再比对新旧密钥指纹是否一致;接着检查DNS、路由等网络可信度;最后用ssh-keygen -R安全更新记录。

当 SSH 连接时出现 “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”,说明客户端发现当前服务器返回的公钥与 ~/.ssh/known_hosts 中记录的不一致。这不是误报,而是 SSH 的核心安全机制在起作用——它在提醒你:这次连上的,可能不是你上次信任的那台机器。
第一步:确认 known_hosts 是否真有旧记录
运行命令查本地是否存有该主机的密钥条目:
-
ssh-keygen -F example.com(用域名) -
ssh-keygen -F 192.168.1.100(用 IP)
如果有输出,说明记录存在;无输出则表示此前未连接过,警告可能是首次连接被误判(比如用了别名或 IP 反解不一致)。注意:-F 不验证网络真实性,只查文件里有没有这一行。
第二步:比对新旧密钥指纹是否真的不同
先提取 known_hosts 中存的指纹:
ssh-keygen -l -f ~/.ssh/known_hosts -F example.com
再从服务端获取真实指纹(需能物理或控制台访问):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
sudo ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub(推荐 ed25519) - 或
sudo ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
两处 SHA256 摘要一致 → 属于正常变更(如重装系统、更换密钥);不一致 → 存在中间人风险,需暂停操作。
第三步:检查网络路径是否可信
密钥变了,但未必是攻击。需排除环境干扰:
- DNS 是否被污染:
dig +short example.com和nslookup example.com结果是否相同?有无异常 CNAME? - 路由是否绕路:
mtr -r example.com看跳数和 AS 路径是否符合预期(例如国内访问不应经美国节点) - 是否连错网络(如公司 WiFi 下 DNS 劫持、公共热点伪造网关)
第四步:清理或更新记录的正确方式
确认变更合理后,不要手动编辑 known_hosts,应使用安全命令:
- 删除旧记录:
ssh-keygen -R example.com(自动处理哈希格式、多行匹配) - 重新连接并接受新指纹:
ssh example.com,按提示输入yes - 若需批量处理多个主机,可配合
ssh-keygen -R加循环脚本
切记:只要没通过可信渠道核实服务端当前指纹,就不要盲目覆盖或跳过警告。

















