出现 Host key verification failed
错误的原因是 SSH 客户端无法验证目标主机的身份,通常是因为:
- 目标主机的公钥未被信任:首次连接某台服务器时,SSH 会提示用户确认该主机的指纹,若未确认或自动跳过,则会出现此错误。
known_hosts
文件中存在冲突的密钥记录:如果之前连接过该主机并保存了其公钥,但该主机的 SSH 密钥已更改(如重装系统),则会因为密钥不匹配而拒绝连接。- 权限问题:
.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
建议操作流程(推荐)
-
清除旧记录:
bash
ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "192.168.x.xx"
-
手动测试 SSH 连接以确认新密钥:
bash
ssh root@192.168.x.xx
此时会提示是否信任该主机,输入
yes
即可将其加入known_hosts
。 -
再执行
scp
或其他操作:bash
scp aaa root@192.168.x.xx:/opt/
注意事项
- 使用
sshpass
时确保密码正确且目标主机允许密码登录。 - 若频繁遇到此类问题,建议配置 SSH 公钥认证以替代密码方式,提高安全性和便利性。