Ssh command from Qt

Ssh command from Qt

本文关键字:Qt from command Ssh      更新时间:2023-10-16

我在QT应用程序中遇到SSH的问题。我需要运行一个命令,该命令在远程服务器上删除文件。我试图使用Qprocess类来实现它。因此,我将" SSH"作为命令的名称和必要的args传递。通常,它看起来像这样:

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

,但是毕竟它一直在询问一个密码,尽管我生成了SSH键并复制了远程服务器的公共密钥。此外,当我在终端中运行上面的命令时:

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"'