通过SSH在Windows机器上运行.exe文件无响应问题排查
问题分析与解决办法
你的问题主要出在SSH远程执行Windows命令时的shell语法差异以及命令的引号/路径处理上,我帮你拆解下问题点和修复方案:
核心问题拆解
- Windows cmd与类Unix shell的语法差异:你用了分号
;分隔命令,但Windows默认shell(cmd.exe)里的命令分隔符是&(顺序执行)或&&(前命令成功才执行后命令),分号在cmd中是无效的,导致cd和exe执行命令没有按预期连续运行。 - 路径写法错误:Windows cmd中,当前目录的可执行文件不需要加
./,直接写File.exe即可;如果要显式用相对路径,应该用.\File.exe(cmd的当前目录标识是.)。 - 引号嵌套与转义问题:你在
os.system里用双引号包裹整个SSH命令,内部又用双引号括exe命令,会导致本地shell解析时引号被破坏,远程机器收到的命令可能不完整。
修复后的几种可行方案
方案1:直接指定exe完整路径(最简洁)
跳过切换目录的步骤,直接写exe的全路径,避免工作目录的问题:
os.system('ssh remote@ip "C:/path/to/File/File.exe Arg1 Arg2"')
用单引号包裹整个SSH命令,内部双引号确保Windows端的命令和参数被正确解析。
方案2:用cmd的命令分隔符&连续执行命令
如果必须先切换目录,改用cmd支持的&来串联命令:
os.system('ssh remote@ip "cd C:/path/to/File & File.exe Arg1 Arg2"')
双引号包裹整个命令块,确保远程cmd.exe能正确识别连续执行的两个命令。
方案3:显式调用cmd.exe执行(适配不同默认shell)
部分OpenSSH for Windows环境会默认用PowerShell作为远程shell,这时可以显式指定用cmd解析命令:
os.system('ssh remote@ip "cmd /c cd C:/path/to/File & File.exe Arg1 Arg2"')
cmd /c表示执行完命令后退出cmd,确保命令按cmd语法执行。
额外排查小技巧
如果exe运行后无任何反馈(比如是GUI程序或后台进程),可以把输出和错误重定向到文件排查:
os.system('ssh remote@ip "C:/path/to/File/File.exe Arg1 Arg2 > C:/temp/output.txt 2>&1"')
之后远程查看C:/temp/output.txt就能看到执行日志或错误信息。
内容的提问来源于stack exchange,提问作者unholy_me
相关产品推荐
相关产品推荐

