You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线执行SCP报Host key verification failed问题排查

解决Jenkins流水线SCP "Host key Verification failed" 问题

嘿,我来帮你搞定这个问题!你在服务器命令行能成功执行SCP,但Jenkins流水线里失败,核心原因很简单:你手动执行命令用的是ubuntu用户,而Jenkins流水线是用jenkins系统用户运行的——这两个用户的SSH信任列表(~/.ssh/known_hosts)是完全分开的,jenkins用户根本没见过目标AWS服务器的主机密钥,所以触发了验证失败。

下面给你几个靠谱的解决办法,按推荐程度排序:

1. 让Jenkins用户手动信任目标主机密钥(最安全)

直接切换到jenkins用户,手动执行一次SSH连接,确认信任目标主机:

# 切换到jenkins用户
sudo su - jenkins
# 用你的pem文件连接目标服务器,会弹出是否信任主机的提示
ssh -i /home/ubuntu/connec/new_one.pem ubuntu@00.00.000.00

当看到类似Are you sure you want to continue connecting (yes/no/[fingerprint])?的提示时,输入yes回车,这样jenkins用户的~/.ssh/known_hosts就会自动记录目标主机的密钥了。

⚠️ 额外注意:

  • 确保你的pem文件权限是600(太宽松会被SSH拒绝):chmod 600 /home/ubuntu/connec/new_one.pem
  • 如果jenkins用户读不到这个pem文件,最好把它复制到jenkins用户的SSH目录下:
    sudo cp /home/ubuntu/connec/new_one.pem /var/lib/jenkins/.ssh/
    sudo chmod 600 /var/lib/jenkins/.ssh/new_one.pem
    sudo chown jenkins:jenkins /var/lib/jenkins/.ssh/new_one.pem
    

2. 提前把目标主机密钥写入Jenkins用户的known_hosts(适合自动化场景)

如果不想手动交互,可以直接用ssh-keyscan获取目标主机的公钥,追加到jenkins用户的信任列表:

# 获取目标主机的公钥并写入jenkins用户的known_hosts
ssh-keyscan 00.00.000.00 >> /var/lib/jenkins/.ssh/known_hosts
# 确保文件权限正确
sudo chmod 600 /var/lib/jenkins/.ssh/known_hosts
sudo chown jenkins:jenkins /var/lib/jenkins/.ssh/known_hosts

执行完这个操作后,Jenkins流水线再跑SCP就不会触发验证错误了。

3. 临时跳过主机密钥验证(仅应急用,不推荐生产环境)

如果只是临时测试,可以在SCP命令里添加-o StrictHostKeyChecking=no参数,强制跳过验证:

stage('Deliver') {
    steps {
        sh 'scp -o StrictHostKeyChecking=no -i /home/ubuntu/connec/new_one.pem **/target/*.jar ubuntu@00.00.000.00:/home/ubuntu/...'
    }
}

⚠️ 注意:这个方法会关闭SSH的主机密钥验证,存在中间人攻击的风险,生产环境绝对不要用!

内容的提问来源于stack exchange,提问作者Pranavadurai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:50:00