gpt4 book ai didi

c++ - 来自 Qt 的 Ssh 命令

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:22 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com