You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins SSH Agent插件加载带密码短语密钥失败排查求助

Jenkins SSH Agent插件加载带密码短语密钥失败问题

问题描述

Jenkins SSH Agent插件无法加载Credentials插件存储的带密码短语密钥,代理与控制器部署在同一机器上,报错信息如下:

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

报错提示加载密码短语的脚本不存在,但该脚本会被插件快速删除,无法验证实际存在性,暂无法定位问题源于SSH Agent插件、Credentials插件还是两者的交互逻辑。

已验证情况

  • 主机系统ssh-agent功能正常:命令行执行ssh-add可成功加载该带密码短语的密钥
  • SSH Agent插件部分可用:无密码短语的密钥可通过Credentials插件正常调用

当前环境

  • 操作系统:RHEL7
  • Jenkins版本:2.359
  • SSH Agent插件版本:295.v9ca_a_1c7cc3a_a_
  • Credentials插件版本: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] }
.
.  (已移除冗余的收尾输出)
.
ERROR: Failed to run ssh-add
Finished: FAILURE

已尝试调整私钥末尾换行符,问题未解决。


排查方案

1. 进一步测试方法

  • 手动模拟插件流程:在Jenkins工作目录下手动创建临时askpass脚本,脚本内容为输出密钥密码短语,设置SSH_ASKPASS环境变量指向该脚本,执行ssh-add加载对应私钥,验证是否因脚本权限或路径导致问题
  • 替换私钥测试:生成新的带密码短语的RSA/ED25519密钥,通过Credentials插件添加后测试,排除原私钥格式异常问题
  • 流水线内直接执行ssh-add:跳过sshagent步骤,手动启动ssh-agent并设置环境变量,通过echo '密码短语' | ssh-add -的方式加载密钥,验证插件的密码传递逻辑是否存在问题

2. 更多日志开启方式

  • 开启插件详细日志:在Jenkins管理界面的「系统日志」中,将com.cloudbees.jenkins.plugins.sshagent和com.cloudbees.plugins.credentials的日志级别设置为FINE或FINER,获取插件执行时的详细流程日志
  • 流水线内增加调试输出:修改流水线,在sshagent步骤前添加sh 'echo $WORKSPACE'、sh 'ls -la $WORKSPACE@tmp/'查看临时目录权限和文件情况;添加env命令输出环境变量,确认SSH_ASKPASS等变量是否正确设置
  • 保留临时askpass脚本:修改Jenkins代理的启动参数,添加-Dcom.cloudbees.jenkins.plugins.sshagent.SSHAgentStep.keepAskPassScript=true,让插件保留askpass脚本不删除,执行流水线后查看脚本内容和权限是否正常

3. 组件隔离定位实验

  • 降级插件版本:分别将SSH Agent插件降级到上一个稳定版本(如293.v42e0b_0c5c0b_7)、Credentials插件降级到兼容版本,测试是否能解决问题,排查新版本插件的兼容性问题
  • 使用独立代理测试:临时创建独立的Jenkins代理(即使同机也使用单独用户运行),将密钥加载到该代理中测试,排除控制器与代理同机导致的权限或环境冲突
  • 绕过Credentials插件:在流水线中通过writeFile将私钥和密码短语写入临时文件,手动执行ssh-add加载,验证是否是Credentials插件传递密码短语时出现异常

内容的提问来源于stack exchange,提问作者jonni83

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:20:33