Windows下Qt C++程序通过SSH执行Linux命令失败求助
Qt C++ Windows应用执行SSH命令失败排查
问题概述
我有一个运行在Windows主机上的Qt C++应用程序,需要通过SSH在Linux机器上执行命令,但尝试多种方法均未成功:
- 使用QProcess执行
ssh <user>@<address> "command"、cmd /c "ssh <user>@<address> \"command\""及PowerShell命令均无效果 - 调用
system()函数也无作用 - 尝试添加
runas /user:Administrator前缀执行上述命令,情况依旧 - 将SSH命令写入bat文件后执行,仍然失败
直接执行ssh无输出且未运行;添加cmd /c或PowerShell前缀时,提示:
ssh is not recognized as an internal or external command, operable program or batch file
我了解可以使用libssh或libssh2,但要求尽量避免,仅在无其他方案时使用。
尝试过的代码片段
- QProcess基础调用:
QProcess* proc = new QProcess(); proc->start("ssh", {"<user>@<address>", "\"<command>\""}); proc->waitForFinished(); QString str = proc->readAll(); std::cout << "out: "+ QString::number(proc->exitCode()) + " -- " + str;
- 上述代码中替换为
ssh.exe完整路径执行 - QProcess结合cmd的调用:
proc->start("cmd", {"/c", "ssh", "<user>@<address>", "\"<command>\""});
- system()函数调用:
int ret = system("cmd /c \"ssh -t <user>@<address> \\\"<command>\\\"\""); std::cout << "ret: " << QString::number(ret).toStdString();
(注:原代码存在语法错误,已修正多余括号)
问题根源发现
从应用程序中执行dir c:\Windows\System32看不到OpenSSH文件夹,但直接在CMD中执行该命令时,该文件夹存在且包含ssh.exe。请问如何让我的应用程序访问到该文件夹?
内容的提问来源于stack exchange,提问作者Ravazz
相关产品推荐
相关产品推荐

