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

Python 3+通过SSH远程执行命令时bash脚本未运行问题排查

问题分析与解决

你的代码存在本地shell解析命令分隔符的关键问题,导致./script.sh根本没在远程机器上执行,而是在本地执行了——这就是你只能看到cmd1输出的原因。

具体问题点

当你使用shell=True时,本地系统的shell会先解析整个命令字符串:

ssh user@ip cmd1; ./script.sh

本地shell会把分号;当成本地命令的分隔符,先执行ssh user@ip cmd1(远程运行cmd1),然后立刻在本地执行./script.sh,完全没把这条脚本命令传给远程机器。

修复方案

方案1:给远程命令加引号,避免本地shell拆分

把远程命令用双引号包裹,让本地shell把整个命令串作为单个参数传给ssh:

cmds = "cmd1; ./script.sh"
output, errors = subprocess.Popen(f'ssh user@{ip} "{cmds}"', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

方案2:禁用本地shell,改用参数列表(更安全推荐)

直接通过参数列表传递命令,跳过本地shell解析,彻底避免这类问题:

cmds = "cmd1; ./script.sh"
output, errors = subprocess.Popen(['ssh', f'user@{ip}', cmds], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

额外排查点

如果修复后脚本还是没执行,检查以下内容:

  • 远程机器上./script.sh是否有执行权限(可通过chmod +x ./script.sh添加)
  • 脚本是否在ssh登录后的默认工作目录下,否则改用绝对路径(比如/home/user/script.sh)
  • 打印errors变量,查看是否有远程执行的错误信息(比如找不到脚本、权限不足等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:33:20