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

Jenkins Pipeline执行报错:身份文件无法访问,寻求解决指导

问题描述

本人是Jenkins及DevOps新手,正尝试将war包部署至运行在Amazon EC2实例上的Tomcat 9.xx(可通过浏览器访问)。

我的Jenkinsfile如下:

pipeline {
    agent any

    parameters {
         string(name: 'tomcat_dev', defaultValue: 'VALID_IP_HIDDEN', description: 'Staging Server')
    }

    triggers {
         pollSCM('* * * * *')
     }

stages{
        stage('Build'){
            steps {
                sh 'mvn clean package'
            }
            post {
                success {
                    echo 'Now Archiving...'
                    archiveArtifacts artifacts: '**/target/*.war'
                }
            }
        }

        stage ('Deployments'){
            parallel{
                stage ('Deploy to Staging'){
                    steps {
                        sh "scp -i /home/user/.ssh/tomcatdeployment.pem **/target/*.war ec2-user@${params.tomcat_dev}:/opt/tomcat/apache-tomcat-9.0.83/webapps"
                    }
                }
            }
        }
    }
}

我可通过上述身份文件连接EC2实例,但运行Jenkins Pipeline时持续报错:

scp -i /home/user/.ssh/tomcatdeployment.pem webapp/target/webapp.war ec2-user@IP_VALUE_HIDDEN:/opt/tomcat/apache-tomcat-9.0.83/webapps
Warning: Identity file /home/user/.ssh/tomcatdeployment.pem not accessible: Permission denied.
Host key verification failed.

我已尝试将Jenkins加入root用户组并配置免密sudo(参考Stack Overflow相关教程),但仍出现相同错误,恳请提供解决指导。

解决指导

1. 修复SSH密钥权限问题

Jenkins默认以jenkins用户运行,你当前指定的密钥路径/home/user/.ssh/tomcatdeployment.pem属于普通用户user,jenkins用户无访问权限:

  • 复制密钥到Jenkins用户的主目录:
    sudo cp /home/user/.ssh/tomcatdeployment.pem /var/lib/jenkins/.ssh/
    
  • 修改密钥的所有者和权限(SSH密钥要求权限必须为*600*,否则会被拒绝):
    sudo chown jenkins:jenkins /var/lib/jenkins/.ssh/tomcatdeployment.pem
    sudo chmod 600 /var/lib/jenkins/.ssh/tomcatdeployment.pem
    
  • 更新Jenkinsfile中的scp命令,将密钥路径改为/var/lib/jenkins/.ssh/tomcatdeployment.pem

2. 解决主机密钥验证失败问题

该错误是因为jenkins用户从未连接过目标EC2实例,未在known_hosts中记录主机密钥:

  • 手动切换到jenkins用户,执行一次SSH连接确认主机密钥:
    sudo su - jenkins
    ssh -i /var/lib/jenkins/.ssh/tomcatdeployment.pem ec2-user@你的EC2_IP
    
    连接时输入yes确认添加主机密钥,之后退出jenkins用户。
  • 若为测试环境,可临时跳过主机密钥验证(不推荐生产环境使用),修改Jenkinsfile中的sh命令:
    sh "scp -o StrictHostKeyChecking=no -i /var/lib/jenkins/.ssh/tomcatdeployment.pem **/target/*.war ec2-user@${params.tomcat_dev}:/opt/tomcat/apache-tomcat-9.0.83/webapps"
    

3. 放弃不必要的root权限配置

将Jenkins加入root组并配置免密sudo属于不安全操作,且并非解决此问题的必要方案。保持Jenkins以自身用户运行,通过调整文件权限和正确配置SSH密钥即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:53:20