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

Windows代理Jenkins流水线执行SSH命令挂起,求排查方案

Jenkins Windows代理执行OpenSSH命令挂起问题排查

问题场景

我在Windows机器上运行安装了OpenSSH for Windows的Jenkins代理,流水线配置如下:

stage('Run ssh command') {
    agent {
        label 'windows-agent'
    }
    steps {
        script {
            bat 'ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o PasswordAuthentication=no -vv -i key.pem some-user@some-host some-command'
        }
    }
}

执行SSH命令时该阶段会挂起,日志输出异常不完整。已添加-o BatchMode=yes -o StrictHostKeyChecking=no -o PasswordAuthentication=no参数确保SSH不会弹出密码提示,但服务器端显示连接从未建立。

用运行Jenkins任务的同一用户在cmd.exe中执行相同命令完全正常。即使移除-i key.pem参数让命令理应失败,仍会挂起;尝试-T或-tt参数也无改善。

Jenkins控制台输出如下:

[2024-07-17T09:17:15.654Z] OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
[2024-07-17T09:17:15.654Z] debug2: resolving "some-host" port 22
[2024-07-17T09:17:15.654Z] ode=yes -o StrictHostKeyChecking=no -o PasswordAuthentication=no -vv -i key.pem some-user@some-host some-command

<hangs here forever>

可见SSH日志不完整,本该输出多行调试信息。我使用的Jenkins版本为2.462,求排查思路。

后续测试与临时解决

我进行了更多测试:

  • 用Sysinternals的Process Monitor工具观察到:SSH能够连接到服务器,但在写入标准输出后(使用-vvv参数时)或写入部分标准输出后(不使用-vvv时)挂起,前几次写入操作正常但后续程序停滞。
  • 发现Git进程使用SSH拉取代码完全正常,因此改用Git for Windows自带的SSH客户端(路径为C:\Program Files\Git\usr\bin\ssh.exe)替代OpenSSH for Windows的客户端(路径为C:\Program Files\OpenSSH\ssh.exe),该二进制文件运行完全正常,当前问题已解决,但仍未知根本原因。

内容的提问来源于stack exchange,提问作者chicken-rice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:43:24