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

Jenkins SSH远程命令执行异常:连接建立但命令未执行且无法终止

Jenkins SSH部署命令未执行且连接无法终止的解决方法

问题根源分析

出现该问题主要是命令语法错误、非交互式环境下的终端参数冲突,以及变量解析环节的潜在问题导致。

具体解决步骤

  • 修正命令语法错误
    原SSH命令末尾的单引号前多了一个空格,导致远程shell无法正确解析完整命令,进而卡住无法终止。修正后的命令:

    sh """ssh -o StrictHostKeyChecking=no -i /var/jenkins_home/.ssh/id_rsa admin@${PROJECT_IP_ADDRESS} 'mkdir /srv/projects/${PROJECT_NAME} -p && chmod 777 /srv/projects/${PROJECT_NAME}'"""
    
  • 移除-tt参数
    -tt参数会强制为SSH会话分配伪终端,在Jenkins的非交互式执行环境中,该参数会导致会话等待终端输入而无法自动断开。去掉该参数后,SSH执行完远程命令会自行终止连接。

  • 验证变量解析有效性
    确保${PROJECT_IP_ADDRESS}和${PROJECT_NAME}在流水线中已正确定义并能被sh步骤解析。可在SSH命令前添加输出语句确认变量值:

    echo "PROJECT_IP_ADDRESS: ${PROJECT_IP_ADDRESS}, PROJECT_NAME: ${PROJECT_NAME}"
    
  • 改用Jenkins SSH插件(可选)
    若直接用sh执行SSH命令仍不稳定,推荐使用Jenkins官方SSH Pipeline Steps插件,它提供更可靠的远程执行和文件传输能力,示例代码:

    stage("Deploy") {
      steps {
        echo "Deploy project..."
        sshCommand remote: remoteServer, command: "mkdir /srv/projects/${PROJECT_NAME} -p && chmod 777 /srv/projects/${PROJECT_NAME}"
        sshPut remote: remoteServer, from: "/srv/projects/${PROJECT_NAME}", into: "/srv/projects/"
      }
    }
    

    其中remoteServer需提前配置远程服务器的IP、用户名、密钥等信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:15:42