我的Qt应用程序中的ssh有问题.我需要运行一个删除远程服务器上的文件的命令.我试图使用QProcess类来实现它.所以我将"ssh"作为命令和必要的args传递.通常它看起来像这样:
QStringList params;
params.append(" user@" + ::host +
" \"rm /tmp/" + ::fileName + "\"");
d->impDelProcess->start("ssh", params);
Run Code Online (Sandbox Code Playgroud)
但毕竟它不断询问密码,虽然我生成了ssh密钥并将公钥复制到远程服务器.而且,当我在终端上运行上面的命令时:
ssh user@host "rm /path/fileName"
Run Code Online (Sandbox Code Playgroud)
它完美无缺.该文件已删除,未提出密码.所以,问题在于QProcess中的问题.有办法摆脱问密码吗?谢谢!
当您使用字符串列表时,这些是单独的参数.试试这个:
params.append("user@" + ::host");
params.append("rm /tmp/" + ::fileName);
Run Code Online (Sandbox Code Playgroud)
这将使Qt为ssh传递两个参数,登录字符串和在远程主机上执行的命令.
重要的提示!以上假定::filename不包含空格或其他任何令人讨厌的东西!你可以用这个来解决空间:
params.append("rm '/tmp/" + ::fileName + "'");
Run Code Online (Sandbox Code Playgroud)
但它无法帮助对抗外卡或..路径...想象一下,如果文件名是../home/user/*例如......那么最好是可信输入,或者你需要消毒它(但这超出了这个答案的范围).
你在问题代码中做的是构造一个参数,相当于这个shell命令行:
ssh 'user@host "rm /path/filename"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |