从jenkins到同一主机的SSH

时间:2018-06-22 07:23:08

标签: jenkins ssh jenkins-pipeline

我在树莓派3上运行了一个jenkins实例,并且在同一树莓派上运行了我的(简单)apache网络服务器。

我从jenkins获得了一条管道来获取git repo,进行构建并将其(通过scp)放置在我的Web服务器上。

我有一个ssh私钥/公钥设置,但是当jenkins托管在具有相同IP地址的同一台“机器”上时,拥有ssh密钥有点愚蠢(?)?

无论如何,在树莓派上,我已经设置了自动密钥文件和带有公共密钥的已知主机文件,并且已经通过ssh-agent插件将私有密钥添加到jenkins。

在这里,jenkins使用了我的jenkinsfile来定义我的管道:

node{
    stage('Checkout') {
        checkout scm
    }

    stage('install') {
        nodejs(nodeJSInstallationName: 'nodeJS10.5.0') {
            sh "npm install"
        }
    }

    stage('build'){
        nodejs(nodeJSInstallationName: 'nodeJS10.5.0') {
            sh "npm run build"
        }
    }

    stage('connect ssh and remove files') {
        sshagent (credentials: ["0527982f-7794-45d0-99b0-135c868c5b36"]) {
            sh "ssh pi@123.456.789.123 -p 330 rm -rf /var/www/html/*"
        }
    }


    stage('upload new files'){
        sshagent (credentials: ["0527982f-7794-45d0-99b0-135c868c5b36"]) {
            sh "scp -P 330 -r ./build/* pi@123.456.789.123:/var/www/html"
        }
    }
}

这是倒数第二个作业的输出:

[Pipeline] }
[Pipeline] // nodejs
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (connect ssh and remove files)
[Pipeline] sh
[Deploy_To_Production] Running shell script
+ ssh pi@123.456.789.123 -p 330 rm -rf /var/www/html/asset-manifest.json /var/www/html/css /var/www/html/favicon.ico /var/www/html/fonts /var/www/html/images /var/www/html/index.html /var/www/html/manifest.json /var/www/html/service-worker.js /var/www/html/static /var/www/html/vendor
Host key verification failed.
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 255
Finished: FAILURE

注意:出于安全原因,我已更改了IP地址和ssh端口。

手动地,我可以SSH到我的树莓派,并且可以从我的笔记本电脑手动执行命令(来自同一域和其他域的作品)。

我还通过端口转发了本地ip,以便当我不在家时可以通过SSH连接到它。

我想我在SSH密钥等方面做错了什么,但我也不是专家!

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我还需要4个信誉点才能评论,所以我必须写答案:)

尝试使用-v调试ssh连接:

stage('connect ssh and remove files') {
    sshagent (credentials: ["0527982f-7794-45d0-99b0-135c868c5b36"]) {
        sh "ssh -v pi@123.456.789.123 -p 330 rm -rf /var/www/html/*"
    }
}

另一方面 主机密钥验证失败表示远程主机的主机密钥已更改,或者您没有远程主机的主机密钥。因此,首先请以Jenkins主机的用户身份以ssh -v pi@123.456.789.123作为Jenkins用户。

答案 1 :(得分:0)

问题确实是主机密钥验证失败。我认为这是由于不信任主机。

但是真正的问题是@ 3sky指出的(请参阅其他答案)。我需要以jenkins用户身份登录并尝试通过ssh登录到我的树莓派(两者都在同一台计算机上)。

这些是我执行的步骤:

  1. 通过ssh登录到我的树莓派

      

    ssh -v pi@123.456.789.123 -p 330

  2. 然后我将用户切换为jenkins用户。经过一些Google搜索,我发现了

      

    sudo su -s / bin / bash jenkins

  3. 然后,我再次SSH到我自己的机器(我已经被SSH到了),这样我就弹出了一次一劳永逸地推入该主机的信息!

      

    ssh -v pi@123.456.789.123 -p 330

这解决了我的问题!非常感谢3sky的帮助!