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

Jenkins执行Bat文件时Putty.exe命令未执行问题求助

问题解决:Jenkins调用Bat时Putty命令未生效

问题概述

本地双击Bat文件时,所有命令(包括Putty通过SSH执行远程命令)都正常运行;但通过Jenkins Pipeline调用该Bat时,Docker命令全部正常,唯独Putty命令没有生效。

原因分析

  1. Jenkins通常以Windows服务形式运行,没有桌面会话,start命令启动的Putty窗口无法在服务环境中显示,导致命令无法正常执行。
  2. start会创建独立进程,Jenkins无法跟踪该进程的执行状态,可能在Putty完成前就结束了构建。
  3. Jenkins服务账户可能没有访问Putty路径或远程服务器的权限。

解决方法

1. 移除start命令,直接调用Putty

Bat文件中原来的start会触发新窗口,服务环境下无法运行,改为直接执行Putty命令:

docker login -u dockeruser -p somepassword
docker rmi frombat
docker build -t frombat --file Dockerfile .
docker tag frombat mydockrep/myimage
docker push mydockrep/myimage
# 去掉start,直接执行Putty
C:\\putty\\putty.exe -ssh 100.200.300.400 -l root -pw somepassword -m substituir_imagem.txt

2. 改用Plink(Putty的命令行版本)

Plink是Putty的纯命令行工具,无需桌面环境,更适合Jenkins这类服务场景:

docker login -u dockeruser -p somepassword
docker rmi frombat
docker build -t frombat --file Dockerfile .
docker tag frombat mydockrep/myimage
docker push mydockrep/myimage
# 使用Plink替代Putty
C:\\putty\\plink.exe -ssh root@100.200.300.400 -pw somepassword -m substituir_imagem.txt

3. 确保文件路径正确

Jenkins执行Bat时的工作目录是其任务的工作空间,若substituir_imagem.txt不在该目录,需指定绝对路径:

# 假设文件在Jenkins工作空间的根目录,或者写完整路径
C:\\putty\\plink.exe -ssh root@100.200.300.400 -pw somepassword -m %WORKSPACE%\\substituir_imagem.txt

4. 调整Jenkins服务运行账户

默认Jenkins服务用Local System账户,可能缺少权限:

  • 打开Windows服务管理器,找到Jenkins服务
  • 右键选择「属性」→「登录」标签
  • 切换为有本地文件访问权限和远程SSH权限的用户(如管理员账户)
  • 重启Jenkins服务

5. 改用SSH密钥认证(推荐)

避免明文密码泄露,用密钥替代密码:

  1. 用Puttygen生成密钥对,将公钥添加到远程服务器/root/.ssh/authorized_keys文件中
  2. 在Bat中用Plink指定私钥文件:
C:\\putty\\plink.exe -ssh root@100.200.300.400 -i C:\\putty\\private_key.ppk -m substituir_imagem.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:53:17