问题
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 代理插件按预期与没有有密码的插件一起工作。
当前环境
我的管道很简单
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 时删除或添加尾随换行符。 我已经尝试过但没有成功。
有没有办法进一步测试?
我可以打开更多日志记录吗?
可以隔离组件并暴露根本原因的实验是什么?
我的问题与这个问题类似,但是我添加了额外的信息,希望我能清楚地说明问题和周围的背景。
我遇到了这样的问题,问题出在ssh密钥的名称上,因为该名称有一些特殊字符,通过在特殊字符前添加 \ escape 问题已解决