Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自Qt的Ssh命令_C++_Qt_Ssh - Fatal编程技术网

C++ 来自Qt的Ssh命令

C++ 来自Qt的Ssh命令,c++,qt,ssh,C++,Qt,Ssh,我的Qt应用程序中的ssh有问题。我需要运行一个命令来删除远程服务器上的文件。我尝试使用QProcess类来实现它。因此,我将“ssh”作为命令名和必要的参数传递。其共同点如下: QStringList params; params.append(" user@" + ::host + " \"rm /tmp/" + ::fileName + "\""); d->impDelProcess->start("ssh", params); ssh u

我的Qt应用程序中的ssh有问题。我需要运行一个命令来删除远程服务器上的文件。我尝试使用QProcess类来实现它。因此,我将“ssh”作为命令名和必要的参数传递。其共同点如下:

QStringList params;    
params.append(" user@" + ::host +
              " \"rm /tmp/" + ::fileName + "\"");
d->impDelProcess->start("ssh", params);
ssh user@host "rm /path/fileName"
但毕竟它一直在询问密码,尽管我生成了ssh密钥并将公钥复制到远程服务器。此外,当我在终端中运行上述命令时,如下所示:

QStringList params;    
params.append(" user@" + ::host +
              " \"rm /tmp/" + ::fileName + "\"");
d->impDelProcess->start("ssh", params);
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”'

非常感谢您!它工作得很好!没有警告和询问密码。Thanx!!!谢谢你的提示!我一直在寻找如何标记答案“正确”。