在用ssh操作远程服务器时,报host key verification fail
这个报错是SSH 主机密钥验证失败导致的(Host key verification failed),是 Linux 下 SSH/SCP 首次连接目标服务器时的安全验证机制触发的问题
解决步骤:
方法 1:手动验证主机密钥(临时解决)
在 Jenkins 服务器上(切换到 Jenkins 运行用户,如jenkins),手动执行一次ssh连接生产服务器,完成密钥验证:
bash
运行
# 切换到jenkins用户 su - jenkins # 连接生产服务器(替换为实际IP) ssh root@生产服务器IP首次连接会提示:
plaintext
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. ECDSA key fingerprint is SHA256:xxxxxx. Are you sure you want to continue connectin输入yes并回车,密钥会被保存到~/.ssh/known_hosts中,之后 SCP 就不会再报这个错误
方法 2:在 SCP 命令中跳过主机密钥验证(不推荐,安全性低)
如果是自动化场景无法手动交互,可以在 SCP 命令中添加-o StrictHostKeyChecking=no参数跳过验证:
bash
运行
# 示例SCP命令(添加参数) scp -o StrictHostKeyChecking=no /本地jar包路径 root@生产服务器IP:/目标路径方法 3:提前将生产服务器密钥写入known_hosts(推荐,自动化友好)
在 Jenkins 的 Shell 构建步骤中,先执行密钥验证命令,再执行 SCP:
bash
运行
# 先验证生产服务器密钥(自动写入known_hosts) ssh-keyscan -H 生产服务器IP >> ~/.ssh/known_hosts # 再执行SCP上传 scp /本地jar包路径 root@生产服务器IP:/目标路径关键说明:
- 核心原因是 Jenkins 运行用户(如
jenkins)的~/.ssh/known_hosts中没有生产服务器的主机密钥,导致 SSH/SCP 拒绝连接; - 方法 1 是最安全的方式,方法 3 适合自动化脚本,方法 2 安全性较低(不建议生产环境用)。
执行上述操作后,重新构建即可解决Host key verification failed的问题。