【发布时间】:2020-04-28 19:58:15
【问题描述】:
我正在尝试从 jenkins 管道到其他服务器执行远程命令。我在两台机器上都创建了用户 pf-devops。
在 jenkins 服务器上,我在 /home/pf-devops/.ssh 中创建了 ssh 密钥 id_rsa 和 id_rsa.pub。
然后在另一台服务器上,创建相同的用户并将他的公钥添加到 /home/pf-devops/.ssh/authorized_keys。
然后,我在 Jenkins 凭据上添加了他的私钥,如下所示:
然后在我的项目的 Jenkinsfile 中,我有以下内容:
def DOCKER_COMPOSE_FILE = 'docker-compose.yml'
def UUID = UUID.randomUUID().toString()
pipeline {
agent any
stages {
stage('Deploy to danielserrao') {
when {
branch 'danielserrao'
}
steps {
script {
DOCKER_COMPOSE_FILE = 'docker-compose-dev-databases.yml'
echo "This should be done only on danielserrao with docker compose file ${DOCKER_COMPOSE_FILE}"
sshagent(['821f7495-e873-4a4b-97eb-f00433d078d9']) {
sh "ssh XXX.XXX.X.153 'touch /tmp/${UUID}'"
}
}
}
}
...
但在执行管道时,我得到以下信息:
This should be done only on danielserrao with docker compose file docker-compose-dev-
databases.yml
[Pipeline] sshagent
[ssh-agent] Using credentials pf-devops (pf-devops private ssh key)
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine)
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-GfKzb8sTTsPq/agent.2021
SSH_AGENT_PID=2023
Running ssh-add (command line suppressed)
Identity added: /var/jenkins_home/workspace/tion-deploy-
penguin_danielserrao@tmp/private_key_8009694440488072457.key
(/var/jenkins_home/workspace/tion-deploy-
penguin_danielserrao@tmp/private_key_8009694440488072457.key)
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
+ ssh XXX.XXX.X.153 touch /tmp/11c8ef5c-4e71-4f38-948a-825af129ce9d
...
然后它永远挂起。如果我尝试使用用户 pf-devops 从 jenkins 服务器执行相同的 ssh 命令,它会工作并在 XXX.XXX.X.153 上创建临时文件,因此用户 SSH 私钥似乎是正确的。
我还尝试了另一种解决方案,使用 https://www.reddit.com/r/docker/comments/b8lmc4/jenkins_pipeline_not_correctly_using_sshagent/ 指定的 withCredentials 方法,但得到了相同的结果。
对可能发生的情况或如何解决此问题有任何想法吗?
Jenkins 版本:2.204.1
两台机器操作系统:Ubuntu 18.04.3 LTS
感谢您的帮助。
【问题讨论】:
标签: jenkins ssh jenkins-pipeline ubuntu-18.04 ssh-keys