簡體   English   中英

從Jenkins連接到EC2實例失敗:主機密鑰驗證失敗

[英]Connection to EC2 instance from Jenkins fails : Host key verification failed

我正在嘗試首次使用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文件中的命令完全相同。 為什么它可以在我的機器上而不是詹金斯上運行?

Jenkinsfile:

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密鑰,並將其傳遞給EC2,一切正常:)

為了進行確認,只需使用您的用戶名SSH進入服務器,然后嘗試使用Jenkins用戶名,直到您完成上述更改后才能使用

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM