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
相关产品推荐
相关产品推荐

