17

プログラムでスクリプト ファイルを作成し、psftp.exe次のように呼び出します。

psftp user@hostname.com -pw password -b psftpscript.txt

しかし、それはユーザー入力を求めます

サーバーのホスト キーはレジストリにキャッシュされません。サーバーがあなたが思っているとおりのコンピューターであるという保証はありません。サーバーの rsa2 キー フィンガープリントは次のとおりです: [ssh-rsa 1024 somekey] このホストを信頼する場合は、「y」を入力してキーを PuTTY のキャッシュに追加し、接続を続行します。キーをキャッシュに追加せずに 1 回だけ接続を続行する場合は、「n」を入力します。このホストを信頼しない場合は、Return キーを押して接続を破棄してください。キーをキャッシュに保存しますか? (はい/いいえ)

完全にプロンプ​​トフリーで、自動である必要があります。-batch パラメーターを試しましたが、接続を放棄するだけです

4

9 に答える 9

26

Windows Server 2008 の「サンドボックス」のような環境で無人スクリプトを実行すると、同じ問題が発生しました。yプロンプトで入力する次のコマンドを実行することになりました。

echo y | psftp user@hostname.com -l username -pw password -b psftpscript.txt

お役に立てれば!

注: echo y を 1 回だけ実行する必要があり、2 回目の実行でそれを削除しても、キーをキャッシュするように求められることはありませんでした。

于 2013-01-21T20:49:44.930 に答える
2

ay とキャリッジ リターンのみを含む入力としてファイルを作成し、実行することができます。

psftp user@hostname.com -pw password -b psftpscript.txt < filename.txt

このような単純なソリューションについては、 http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspxのJames に感謝します。

于 2012-06-26T15:55:52.680 に答える
1

.Net では、上記の方法が期待どおりに機能しないことがわかりました。<秘訣は、オペレーターではなく、.Net の組み込みの入力リダイレクトを使用することでした。コードは次のようになります。

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "c:\\psftp.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;            
proc.StartInfo.Arguments = strIP + " -v -l " + strUsername + " -pw " + strPassword + " -b " + strBatchFilename;            
proc.Start();
StreamWriter myStreamWriter = proc.StandardInput;
myStreamWriter.WriteLine("Y\n"); //override the public key question <---
myStreamWriter.Close();
proc.WaitForExit();
proc.Close();
于 2012-07-01T12:34:47.920 に答える
0

プロンプトに「y」と入力して、キャッシュにキーを追加することになりました。一度だけ実行する必要がありましたが、その後はプロンプトが表示されなくなり、うまく機能しました。

于 2011-09-30T18:35:31.677 に答える
-1

コマンドラインに問題があると思います。

Usage: psftp [options] [user@]host

試す:

psftp -pw password -b psftpscript.txt user@hostname.com
于 2013-02-26T11:26:02.247 に答える