2

Web ページから別のサーバーで perl スクリプトを開始しようとしていますが、plink に問題があります。IUSR_ ユーザーから実行すると、ホスト キーが記憶されていないようです。

私はこの問題を軽減することができました:

print "Content-Type:text/plain\n\n";
open(PLINK, "| \"C:\\Program Files\\PuTTY\\plink.exe\" -pw sanitized Administrator\@serveurftp.a.b.c whoami") or die "Can't fork: $!";
sleep(1);
print PLINK "y\n";
close(PLINK);

このスクリプトを Web ページから呼び出すと、常に次のようになります。

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 cb:eb:dc:1b:9e:1c:6b:fa:63:fb:2e:ba:2c:61:26:c4
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) serveurftp\administrator

これは初回のみ取得し、その後は「serverurftp\administrator」のみ取得する必要がありますが、IIS から実行した場合、plink はホスト キーを保存できないようです。

これを回避する方法について何か考えがありますか?

4

3 に答える 3

2

このような場合、アプリケーションは、必ずしも標準入力からではなく、コンソール (または Unix では tty) から y/n 応答を読み取ろうとすることがよくあります。それにパイプします。

いくつかの回避策は次のとおりです。

  1. コマンドラインからIIS ユーザーとしてコマンドを実行します。おそらく、それはウェブサーバーからの呼び出しのホストを保持します。
  2. コマンドラインから自分でコマンドを実行します。ユーザーのキャッシュ ファイルを見つけて、そのファイルからキーを管理者のキャッシュ ファイルにコピーします。
  3. お使いのマシンに Web サーバー プログラムのコンソール ウィンドウがある場合は、ブラウザからこのスクリプトにアクセスし、スクリプトがこの応答を要求するポイントに達したときに、そのコンソール ウィンドウに「y」と入力してみてください (これはおそらく機能しません)。プログラムはすでに子プロセスで実行されている可能性がありますが、試してみる価値があるかもしれません)
于 2011-02-02T17:59:24.333 に答える
0

Tcl スクリプト内で (Expect コマンドと共に) plink.exe を生成しているため、pipe | を使用できませんでした。tcl がそれを認識しないためです。plink を生成し、「y」を押して終了し、再度 plink を生成することで同じことを達成しました。

#Push a "y" to overcome ssh host key challenge
spawn plink -ssh 192.168.1.1 -l username -pw password
send -s "y\r"
send -s "exit\r"

#ssh into host
spawn plink -ssh 192.168.1.1 -l username -pw password
于 2016-01-29T19:03:03.937 に答える