解决 SSH 连接时 "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" 错误

发表于 2025-09-05 19:58:03 分类于 Linux运维 阅读量 130

解决 SSH 连接时 "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" 错误

问题描述

当尝试通过 SSH 连接到服务器时,可能会遇到以下安全警告:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.

错误原因

这个错误表明远程主机(如 172.16.1.3)的 SSH 密钥发生了变化,与本地存储的密钥不匹配。常见原因包括:

  1. 服务器系统重装或重置
  2. SSH 主机密钥被重新生成
  3. IP 地址被分配给不同的设备
  4. 服务器操作系统或SSH服务重大更新

解决方案

方法一:删除本地旧的密钥记录(推荐)

这是最常用且安全的方法,适用于确认服务器密钥变更是合法的情况。

# 删除指定IP的密钥记录
ssh-keygen -R 172.16.1.3

# 或者指定具体文件
ssh-keygen -f "/root/.ssh/known_hosts" -R "172.16.1.3"

执行效果:

# Host 172.16.1.3 found: line 3
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

方法二:手动编辑 known_hosts 文件

如果需要更精确的控制,可以手动编辑密钥文件:

# 根据错误提示的行号删除特定行(例如第3行)
sed -i '3d' /root/.ssh/known_hosts

# 或者使用文本编辑器手动删除
nano /root/.ssh/known_hosts

方法三:处理非标准端口的情况

如果 SSH 服务运行在非标准端口:

# 删除特定IP和端口的密钥记录
ssh-keygen -R "[172.16.1.3]:2222"

重新连接

完成上述操作后,重新尝试连接:

ssh root@172.16.1.3

系统会提示验证新的主机密钥指纹:

The authenticity of host '172.16.1.3 (172.16.1.3)' can't be established.
ED25519 key fingerprint is SHA256:8GSXunz4s1fnXh/u+Wz89CVO4jrtZpecQ9HbYtCNP4I.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入 yes 接受新密钥后,连接即可恢复正常。

安全注意事项

✅ 应该做:

  • 验证密钥指纹:通过其他安全渠道确认新密钥的合法性
  • 定期检查密钥:特别是在团队环境中维护服务器时
  • 备份 known_hosts 文件:重要环境中建议备份

❌ 不应该做:

  • 盲目接受所有密钥变更
  • 在生产环境中禁用密钥检查
  • 忽略安全警告

⚠️ 危险方法(不推荐):

# 临时绕过主机密钥检查(降低安全性)
ssh -o StrictHostKeyChecking=no root@172.16.1.3

# 完全忽略已知主机文件(极不安全)
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@172.16.1.3

仅在完全信任的网络环境中临时使用这些方法。

预防措施

  1. 文档记录:记录服务器的重要变更,特别是重装系统时
  2. 密钥管理:在团队中建立SSH密钥变更的沟通机制
  3. 监控告警:设置SSH连接异常的监控和告警
  4. 使用DNS:使用域名而非IP地址连接,减少因IP变更导致的问题

总结

"REMOTE HOST IDENTIFICATION HAS CHANGED" 错误是 SSH 的安全保护机制,提醒您远程主机的身份发生了变化。在确认变更合法后,使用 ssh-keygen -R 命令清理旧记录是最安全简单的解决方法。

记住:安全警告存在的目的是为了保护您,不要轻易禁用这些安全功能。

正物博客
一路向前,山海自平