Jenkins ssh-agent 故障排除

问题描述 投票:0回答:1

问题
Jenkins SSH 代理插件 无法成功加载带有与 Credentials Plugin 一起存储的密码的密钥。 Jenkins 代理与控制器在同一台机器上运行。

ssh_askpass: exec(/var/lib/jenkins/workspace/testing@tmp/askpass_11086250741160980548.sh): No such file or directory

该错误似乎表明用于加载密码的脚本不存在。 我不知道它是否存在或如何测试它,因为我假设它会被快速删除。我可以验证运行后脚本不存在,但这是预期的。因此,我不确定问题是否出在 SSH Agent Plugin、或 Credentials Plugin 或两个插件的组合/交互。

主机上的 ssh-agent 二进制文件可以正常工作
问题似乎不在于主机系统,因为我能够使用引用的密钥和密码从命令行成功使用

ssh-add

SSH 代理插件部分工作
用户名、私钥和密码已使用凭证插件添加到 Jenkins 控制器中。 SSH 代理插件按预期与没有有密码的插件一起工作。

当前环境

  • RHEL7
  • 詹金斯 2.359
  • SSH 代理插件版本 295.v9ca_a_1c7cc3a_a_
  • 凭证插件版本1143.vb_e8b_b_ceee347
  • OpenSSH_8.8p1a

我的管道很简单

pipeline {
    agent any
    options {
        ansiColor('xterm')
    }
    stages {
        stage("setup environment") {
            steps {
                deleteDir()
            } //steps
        } //stage - setup environment
        stage("Test the key") {
            steps {
                sshagent(['testkey']) {
                    sh "ssh host whoami"
                } //sshagent
            } //steps
        } //stage - Test the key
    } //stages
} //pipeline

输出看起来像这样

[Pipeline] {
[Pipeline] sshagent
[ssh-agent] Using credentials testkey (Test key with passphrase)
[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-oKcZZF65GvXc/agent.31647
SSH_AGENT_PID=31650
Running ssh-add (command line suppressed)
ssh_askpass: exec(/var/lib/jenkins/workspace/testing@tmp/askpass_11086250741160980548.sh): No such file or directory
[Pipeline] // sshagent
[Pipeline] }
.
.  (I removed the extraneous output showing the closing of each section.)
.
ERROR: Failed to run ssh-add
Finished: FAILURE

我发现了类似的问题,Jenkins 在与 ssh-agent 工具交互时遇到问题,但这里的情况并非如此。 指示的问题在于(我猜测)为 ssh-agent 提供密钥和密码的脚本。

例如,这篇文章描述了在客户端上执行

ssh-askpass
时,
ssh-add
二进制文件的问题。

ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
Permission denied, please try again.

在我的场景中,

ssh-add
由 Jenkins 控制器上的
ssh-agent
插件执行,这是 Jenkins 代理启动的地方。错误不在于
ssh-askpass
二进制文件,而是 Jenkins 生成的用于与
@tmp/askpass_####.sh
交互的
ssh-askpass
脚本。

一些症状略有不同的帖子建议在将私钥添加到 Jenkins Web UI 时删除或添加尾随换行符。 我已经尝试过但没有成功。

  • 有没有办法进一步测试?

  • 我可以打开更多日志记录吗?

  • 可以隔离组件并暴露根本原因的实验是什么?

我的问题与这个问题类似,但是我添加了额外的信息,希望我能清楚地说明问题和周围的背景。

jenkins jenkins-pipeline jenkins-plugins openssh ssh-agent
1个回答
0
投票

我遇到了这样的问题,问题出在ssh密钥的名称上,因为该名称有一些特殊字符,通过在特殊字符前添加 \ escape 问题已解决

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.