2017-04-26 125 views
1

我在Qt应用程序中遇到了ssh问题。我需要运行一个删除远程服务器上的文件的命令。我试图使用QProcess类来实现它。所以我通过“ssh”作为命令的名称和必要的参数。在共同它看起来像这样:来自Qt的ssh命令

QStringList params;  
params.append(" [email protected]" + ::host + 
       " \"rm /tmp/" + ::fileName + "\""); 
d->impDelProcess->start("ssh", params); 

但毕竟它不断要求输入密码,但我生成SSH密钥并复制公钥到远程服务器。此外,当我在终端上面运行命令是这样的:

ssh [email protected] "rm /path/fileName" 

它的工作原理非常完美。该文件被删除并且没有密码被询问。所以,这个问题在QProcess中很重要。有什么办法摆脱要求密码?谢谢!

回答

4

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

params.append("[email protected]" + ::host"); 
params.append("rm /tmp/" + ::fileName); 

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

重要说明!以上假设::filename不包含空格或任何其他讨厌的!你可以避开空间这一点:

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

但是这将不利于对野生卡或..路径......试想一下,如果文件名是../home/user/*例如......所以这是更好的被信任的输入,或者你需要清理它(但这超出了这个答案的范围)。


你在问题中的代码做的是建立一个单一的说法,相当于这个shell命令行:

ssh '[email protected] "rm /path/filename"' 
+0

太谢谢你了!它非常完美!没有警告并要求输入密码。感谢名单! –

+0

谢谢你的提示!我一直在寻找如何标记答案“正确”。 –