2011-09-12 12 views
1

私はそれをどのように置くのがベストかわかりませんが、私の問題です: クライアントAとサーバBの2台のマシンがあります。 クライアントは認証済みですBに正常に接続するためのパスワードは必要ありません。私がAからBへのsshを実行すると、パスワードなしでログインします。Parallel:ForkManagerを使用しているときにsshキーがインストールされているにもかかわらず、サーバーにパスワードを入力する

ただし、 Parallel :: Forkmanagerモジュールを使用して複数の並列接続を使用すると、パスワードを尋ねることがあります。

私は接続に使用するコードを以下に示します。 コード: 使用Parallel:ForkManager;

my $pm=new Parallel::ForkManager(15); 
foreach my $processNumber (1 .. 15) { 
$pm->start and next; 
<subroutine to ssh to the server and perform some actions>; 
$pm->finish; 
} 
$pm->wait_all_children; 

すべてのプロセスが断続など をいくつかのテーブルを作成するための約5000より多くの反復を持っている、それが正常にないときに、クライアントを認証するためにパスワードの入力を求められます。

sshキーはサーバーに保存されます。

何が問題なのですか?どんな助けもありがとうございます。

+0

コマンドラインの 'ssh'またはPerlモジュールを使用していますか? –

+0

コマンドラインssh。 –

+0

答えはありません(手元の情報はわかりません)。しかし、もっと冗長で 'ssh'を起動して、ログ出力を期待されるパスワードなしの接続と比較することができます。 –

答えて

1

通常、リモートサーバーのsshdで認証が保留されている最大同時接続数に達した場合、この現象が発生します。デフォルトは10です。フォークされた15の子供を使用しているので、あなたは確かにその限界に到達することができます。

いくつかの解決策:

  1. 編集/etc/ssh/sshd_configサーバー上とまたMaxStartups
  2. を高め、あなたのネットワークが互い違いになっていることを確認してくださいforeachループの先頭でsleep $processNumber;を追加してみてくださいすることができます。
  3. または、プロセス数を15から10以下に減らしてください。

無関係、しかし、あなたはおそらくこれまでに対話的にパスワードまたはキー確認のためにあなたを促すからそれを防ぐために、コマンドライン上の-O BatchMode=yesでのsshを呼び出すことになるでしょう。代わりに失敗し、ゼロ以外の値で終了するので、スクリプトが正常にエラーを検出して処理しやすくなります。

関連する問題