【问题标题】:Jenkins Pipeline - ssh-agent can't find credentialsJenkins Pipeline - ssh-agent 找不到凭据
【发布时间】:2020-02-17 14:43:32
【问题描述】:

我有一个任务是通过 GUI 作为 Freestyle 项目进行的。我正在尝试按照我能找到的所有说明和文档将其转换为管道作业,但我遇到了错误。

这是我为该操作创建的凭据。

我正在尝试一个相当简单的测试来在远程 Windows 服务器上运行命令。

#!/usr/bin/env groovy

pipeline {
    agent any
    stages {
        stage("build") {
            steps {
                sshagent(credentials: ['1c0972a6-2bbf-4144-XXXX-XXXXXXXXXXXX']) {
                    sh """

                        ssh "dev user@XX.XX.XX.XX" su -c "powershell /project/getproj.bat | tee build.log"

                    """
                }
            }
        }

    }
}

最后,输出日志。

Started by user XXXX XXXX
Obtained Jenkinsfile from git https://xx.xx.com/xxxx.git
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/Testing/xxxx
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
using credential 0d240009-1e30-4e3b-xxxx-xxxxxxxxxxxx
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://xx.xx.com/xxxx.git # timeout=10
Fetching upstream changes from https://xx.xx.com/xxxx.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://xx.xx.com/xxxx.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/convert_jenkinsfile^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/convert_jenkinsfile^{commit} # timeout=10
Checking out Revision 40a510567b52ce621cb6590ab233289cb1948ad4 (refs/remotes/origin/convert_jenkinsfile)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 40a510567b52ce621cb6590ab233289cb1948ad4
Commit message: "Update Jenkinsfile"
 > git rev-list --no-walk 6325e08c341a4e7e0cec8538640bd3d6cf6941fa # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (build)
[Pipeline] sshagent
FATAL: [ssh-agent] Could not find specified credentials
[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-pRQqteq1L7US/agent.49961
SSH_AGENT_PID=49964
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
+ ssh dev user@xx.xx.xx.xx su -c powershell /project/getproj.bat | tee build.log
Host key verification failed.
[Pipeline] }
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 49964 killed;
[ssh-agent] Stopped.
[Pipeline] // sshagent
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 255
Finished: FAILURE

我不知道是我识别凭据的方式有问题,还是 Jenkinsfile 有问题。我打算在远程 Windows 服务器上运行多个命令。

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    ssh-agent 插件不支持用户/密码凭据。

    发现此信息并不容易,但您会发现plugin documentation 表示“请注意,只能使用基于私钥的凭据。”

    如果您指定的凭据 ID 指的是“带密码的用户名”类型的凭据,您总是会得到“FATAL: [ssh-agent] 找不到指定的凭据”

    【讨论】:

      【解决方案2】:

      这可能与JENKINS-32101 有关。请尝试替代语法sshagent(['1c0972a6-2bbf-4144-XXXX-XXXXXXXXXXXX']) {...}

      【讨论】:

      • 更改语法确实有助于解决我遇到的错误。但是,当它在那里进行身份验证时,它现在在 ssh 行上出现错误。 ''' #!/usr/bin/env groovy 管道 { 代理任何阶段 { stage("build") { steps { sshagent(['1c0972a6-2bbf-4144-8f81-6840f10bce2e']) { sh "ssh -o StrictHostKeyChecking =no 'dev user@10.72.46.209' 'powershell /project/getproj.bat' " } } } } '''
      • 权限被拒绝(公钥、密码、键盘交互)。
      • 我登录到运行 Jenkins 的 Docker 容器,并能够使用我在 Jenkins 中使用的用户名和密码 ssh 进入远程主机。这让我认为链接中的建议不适用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多