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

これらは、文字列リストを使用する場合、別々の引数です。これは、Qtがssh、ログイン文字列、リモートホストで実行するコマンドの2つの引数を渡すようにします。

重要なメモ!上記は::filenameにスペースやその他の不快なものが含まれていないと仮定しています。 、

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

しかし、それはより良い信頼することが入力されているので、それは...ファイル名が例えば ../home/user/*た場合を想像し...パスにワイルドカードや ..に対して助けにはなりません:あなたはこれで、スペースを回避することができますまたはそれを浄化する必要があります(ただし、この回答の範囲を超えています)。

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

はそんなにありがとう:あなたは質問のコードで何


は、このシェルのコマンドラインと同等の単一の引数を構築することです!それは完璧に働いた!警告なしでパスワードを尋ねるありがとう!!! –

+0

あなたのヒントありがとう!私はちょうど答えを "正しい"とマークする方法を探しています。 –

関連する問題