出现 Host key verification failed 错误的原因是 SSH 客户端无法验证目标主机的身份,通常是因为:

  1. 目标主机的公钥未被信任:首次连接某台服务器时,SSH 会提示用户确认该主机的指纹,若未确认或自动跳过,则会出现此错误。
  2. known_hosts 文件中存在冲突的密钥记录:如果之前连接过该主机并保存了其公钥,但该主机的 SSH 密钥已更改(如重装系统),则会因为密钥不匹配而拒绝连接。
  3. 权限问题.ssh 目录或 known_hosts 文件的权限设置不当,导致 SSH 无法读取或写入。

解决方法

✅ 方法一:手动清除特定主机的密钥记录

使用你提到的命令来删除旧的密钥记录:


bash

ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "192.168.x.xx"

这将从 known_hosts 文件中移除 IP 地址为 192.168.x.xx的主机记录。

执行完此命令后,再次尝试 scp 或 ssh 操作,系统会提示你是否信任该主机的新密钥。


✅ 方法二:禁用 Strict Host Key Checking(仅限可信网络)

在脚本或自动化部署中,可以临时禁用主机密钥检查(不推荐用于生产环境):


bash

scp -o StrictHostKeyChecking=no aaa root@192.168.x.xx:/opt/

也可以添加 -o UserKnownHostsFile=/dev/null 来避免修改本地 known_hosts 文件:


bash

scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null aaa root@192.168.x.xx:/opt/


✅ 方法三:手动添加主机密钥到 known_hosts

如果你已经确认目标主机的指纹是可信的,可以手动将其添加到 known_hosts 文件中。例如:


bash

ssh-keyscan 192.168.0.x.xx >> ~/.ssh/known_hosts


建议操作流程(推荐)

  1. 清除旧记录

    
      

    bash

    ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "192.168.x.xx"

  2. 手动测试 SSH 连接以确认新密钥

    
      

    bash

    ssh root@192.168.x.xx

    此时会提示是否信任该主机,输入 yes 即可将其加入 known_hosts

  3. 再执行 scp 或其他操作

    
      

    bash

    scp aaa root@192.168.x.xx:/opt/


注意事项

  • 使用 sshpass 时确保密码正确且目标主机允许密码登录。
  • 若频繁遇到此类问题,建议配置 SSH 公钥认证以替代密码方式,提高安全性和便利性。
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐