2017-04-26 164 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

謝謝你的提示!我一直在尋找如何標記答案「正確」。 –