来自Qt的Ssh命令

时间:2017-04-26 12:55:54

标签: c++ qt ssh

我的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中的问题。有办法摆脱问密码吗?谢谢!

1 个答案:

答案 0 :(得分:5)

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

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