【问题标题】:Connection to EC2 instance from Jenkins fails : Host key verification failed从 Jenkins 连接到 EC2 实例失败:主机密钥验证失败
【发布时间】:2018-11-13 04:21:22
【问题描述】:

我第一次尝试使用 Jenkins 将部署自动化到 EC2 实例。

我在EC2实例中安装了tomcat8,并将tomcat8/webapps文件夹的权限改为777($ chmod 777 webapps)。

来自 EC2 的 .ssh 位于 known_hosts 文件中。

我可以使用控制台中的scp 连接.war 文件并将其复制到服务器文件夹,但在自动化过程中失败。

$ scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/webapp.war ec2-user@35.158.118.56:/var/lib/tomcat8/webapps

== copies the *.war file to tomcat8/webapps ==

在詹金斯,我得到:

[Deploy to Staging] + scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/webapp.war ec2-user@35.158.118.56:/var/lib/tomcat8/webapps
[Deploy to Staging] Host key verification failed.
[Deploy to Staging] lost connection

来自控制台和 Groovy Jenkins 文件的命令完全相同。为什么它可以在我的机器上运行,而不是在 Jenkins 上运行?

Jenkins 文件:

pipeline {
  agent any

  tools {
    maven 'localMaven'
  }

  parameters {
    string(name: 'production', defaultValue: '54.93.78.130', description: 'Staging server')
    string(name: 'staging', defaultValue: '35.158.118.56', description: 'Production 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 /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/*.war ec2-user@${params.staging}:/var/lib/tomcat8/webapps"
          }
        }

        stage('Deploy to Production') {
          steps {
            sh "scp -i /Users/Shared/Jenkins/aws.pem /Users/Shared/Jenkins/Home/jobs/fully-automated/builds/28/archive/webapp/target/*.war ec2-user@${params.production}:/var/lib/tomcat8/webapps"
          }
        }
      }
    } 
  }
}

感谢您的帮助!

【问题讨论】:

    标签: linux jenkins amazon-ec2 groovy devops


    【解决方案1】:

    这是许多人常犯的错误。您已授予“USERNAME”访问 EC2 而不是“JENKINS”用户的权限。做同样的事情,但这次是为 Jenkins 用户做的。

    Jenkins 有自己的名为“jenkins”的用户,您可以在 users 文件夹中观察它,在此处创建 ssh 密钥并将其传递给 EC2,一切都会正常工作:)

    为了确认,只需使用您的用户名 ssh 到服务器并尝试使用 Jenkins 用户名它不会工作,直到您执行上述更改

    希望这会有所帮助:)

    【讨论】:

    • 嗨@rohit 感谢您的回答!我在 Jenkins users 文件夹中有两个用户:admin 和 jen.lijo(我)。我不记得对我的用户名授予任何特定权限...我创建了实例,添加了一个安全组和一个密钥对,并使用该密钥连接到它。您能否详细说明如何将这些权限授予 Jenkins?您可以提供任何文件吗? :)
    • @catch22 您正在查看应用程序用户...我说的是系统用户...如果您查看 /home/jenkins ....该用户应该可用并且您必须从这里创建 ssh 密钥
    • /Users/Shared/Jenkins/Home/users/ 这是我正在寻找的地方.. 只有adminjen.lijo :/
    • 大声笑...您能帮我确认两件事...您使用的是哪个操作系统??和 admin 和 jen.lijo 这些是你用来登录 jenkins 的用户吗??
    • 您对用户名的提示使我找到了一个临时解决方案。解决了将 jenkins 用户名更改为我的系统用户名的问题,并且成功了:biolinh.wordpress.com/2016/10/18/change-user-running-jenkins
    猜你喜欢
    • 2012-01-23
    • 2020-07-15
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2015-05-20
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多