我在树莓派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密钥等方面做错了什么,但我也不是专家!
有人可以帮忙吗?
答案 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登录到我的树莓派(两者都在同一台计算机上)。
这些是我执行的步骤:
通过ssh登录到我的树莓派
ssh -v pi@123.456.789.123 -p 330
然后我将用户切换为jenkins用户。经过一些Google搜索,我发现了
sudo su -s / bin / bash jenkins
然后,我再次SSH到我自己的机器(我已经被SSH到了),这样我就弹出了一次一劳永逸地推入该主机的信息!
ssh -v pi@123.456.789.123 -p 330
这解决了我的问题!非常感谢3sky的帮助!