linux - 从 Jenkins 连接到 EC2 实例失败 : Host key verification failed

标签 linux jenkins amazon-ec2 groovy devops

我第一次尝试使用 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 ==

在 Jenkins 中,我得到:

[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"
          }
        }
      }
    } 
  }
}

感谢您的帮助!

最佳答案

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

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

为了确认,只需使用您的用户名 ssh 进入服务器并尝试使用 Jenkins 用户名,在您进行上述更改之前它不会工作

希望这有帮助:)

关于linux - 从 Jenkins 连接到 EC2 实例失败 : Host key verification failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670289/

相关文章:

c++ - 使用 libudev 在 Linux 中获取有关已安装驱动器的信息

linux - 如何在非常大的日志中快速查找事件

java - 如何将jar发布到Nexus(快照存储库)?

jenkins - jenkins 共享库中的库变量

amazon-web-services - AWS EC2 实例上的 Websocket 服务器在两天不活动后没有响应

amazon-web-services - 数据库RDS静态端点

linux - 使用哪个 UUID 库

c++ - 如何编译(构建)我的 Qt 应用程序以在许多 Linux 发行版上运行?

java - 如何设置新的 Jenkins slave

amazon-web-services - 如何在不使用网关机器的情况下使用 chef 在 vpc 中启动 amazon ec2 实例?