c++ - 来自 Qt 的 Ssh 命令

标签 c++ qt ssh

我的 Qt 应用程序中的 ssh 有问题。我需要运行一个命令来删除远程服务器上的文件。我尝试使用 QProcess 类来实现它。所以我将“ssh”作为命令名称和必要的参数传递。通常它看起来像这样:

QStringList params;    
params.append(" user@" + ::host +
              " \"rm /tmp/" + ::fileName + "\"");
d->impDelProcess->start("ssh", params);

但毕竟它一直在询问密码,尽管我生成了 ssh key 并将公钥复制到远程服务器。此外,当我像这样在终端中运行上面的命令时:

ssh user@host "rm /path/fileName"

它工作完美。文件被删除,不要求密码。所以,问题出在 QProcess 的某个地方。有什么办法可以摆脱询问密码?谢谢!

最佳答案

当您使用字符串列表时,这些是单独的参数。试试这个:

params.append("user@" + ::host");
params.append("rm /tmp/" + ::fileName);

这将使 Qt 为 ssh 传递两个参数,登录字符串和在远程主机上执行的命令。

重要说明!以上假定 ::filename 不包含空格或任何其他令人讨厌的东西!。你可以绕过这个空间:

params.append("rm '/tmp/" + ::fileName + "'");

但它对路径中的通配符或 .. 没有帮助...想象一下,例如文件名是 ../home/user/*。 .. 所以最好是可信输入,或者你需要对其进行清理(但这超出了这个答案的范围)。


您在问题代码中所做的是构造一个参数,相当于此 shell 命令行:

ssh 'user@host "rm /path/filename"'

关于c++ - 来自 Qt 的 Ssh 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634876/

相关文章:

c++ - 为什么我不能将类指针传递给访问者类?它说没有匹配的功能

C++ 函数调用标识符

c++ - 使用 Qt Designer 通过附加菜单扩展 QMainWindow 的现有 UI

c++ - 通过管道与 PuTTY 通信

c++ - ubuntu 中的 Armadillo 问题

c++ - DirectShow:转储流

c++ - 如何在Qt中初始化拆分器句柄位置?

qt - 更改QListView的多个选择模式

linux - 有没有办法在 ssh 中运行本地 bash 函数

docker - GitHub Actions 中的 SSH "Host key verification failed"- 但已知主机中存在 key