3

複数のホスト (500 以上) に SSH 接続し、目的のコマンドを実行し、画面に出力を表示できるスクリプトを perl で作成しようとしています。ssh-keys が構成されておらず、それらを構成することが許可されていないため、Net::OpenSSH モジュールでこれを行いました。そのため、ssh の実行中にパスワードを提供できるものを使用する必要があります。

接続が多いため、実行中にかなりの時間がかかります。「perl での並列 ssh」を検索したところ、並列 ssh (Net::OpenSSH:Parallel) を開くためのモジュールがあることがわかりましたが、いくつかのフォーラムのどこかで、Net を使用してキャプチャできるように、このモジュールでは出力をキャプチャできないことを読みました。 ::OpenSSH ($ssh->caputre(ls))。

では、より適切な方法で並列 ssh を実現するにはどうすればよいでしょうか? また、時間を節約するために使用できる他の提案も歓迎します。スレッドで Net:OpenSSH を使用すると時間を節約できますか、それともまったく同じように動作しますか?

4

2 に答える 2

4

プログラムをフォークし、Parallel::ForkManager のようなものでフォークを管理できます。次に、Net::OpenSSH を使用して SSH 作業 + キャプチャーを実行し、結果を画面に表示します。ただし、STDOUT/STDERR に同時に書き込もうとするすべてのプロセスが文字化けした結果を取得するため、IO には注意する必要があります。この質問からの回答のようなことをする必要があります (親プロセスと子プロセスの間のパイプ): fork() and STDOUT/STDERR to the console from child processes

並列プログラミングは直列よりも難しいので、楽しみの準備をしてください :)

于 2012-07-20T14:39:35.017 に答える
2

1つの方法は、シェルスクリプトを使用してperlスクリプトを実行することです。

#!/bin/bash

for host in $(cat myhosts)
do
  perl myperl.pl $host $1 $2 &
done 

ここで、myhostsは500以上のホスト名を含むファイルです

于 2012-07-20T05:14:04.837 に答える