4

並列sshに関するスレッドとドキュメントはたくさんありますが、各ホストにカスタムパラメーターを渡すことについては何も見つかりません。例psshとして、hostsファイルは次のように定義されます。

111.111.111.111
222.222.222.222

ただし、次のようなシェルスクリプトを介して各ホストにカスタムパラメータを渡したいと思います。

111.111.111.111 param1a param1b ...
222.222.222.222 param2a param2b ...

または、ホストとパラメーターを2つのファイルに分割することをお勧めします。

これは一般的ではないので、これは並列sshの誤用ですか?スクリプトから多くのsshプロセスを作成する必要がありますか?これにどのようにアプローチすればよいですか?

4

3 に答える 3

4

GNU parallelを使用できます。

ファイルargfileがあるとします:

111.111.111.111 param1a param1b ...
222.222.222.222 param2a param2b ...

その後、実行中

parallel --colsep ' ' ssh {1} prog {2} {3} ... :::: argfile

prog対応するパラメーターを使用して各ホストで実行されます。パラメータの数が各ホストで同じであることが重要です。

于 2013-01-22T11:54:33.167 に答える
1

ニーズに合わせて調整した後、使用できるソリューションは次のとおりです。

#!/bin/bash
#filename: example.sh
#usage: ./example.sh <par1> <par2> <par3> ... <par6>

#set your ip addresses
$traf1=1.1.1.1
$traf2=2.2.2.2
$traf3=3.3.3.3

#set some custom parameters for your scripts and use them as you wish.
#In this example, I use the first 6 command line parameters passed when run the example.sh


ssh -T $traf1 -l username "/export/home/path/to/script.sh $1  $2" 1>traf1.txt 2>/dev/null &
echo "Fetching data from traffic server 2..."
ssh -T $traf2 -l username "/export/home/path/to/script.sh $3  $4" 1> traf2.txt 2>/dev/null &
echo "Fetching data from traffic server 3..."
ssh -T $traf3 -l username "/export/home/path/to/script.sh $5  $6" 1> traf3.txt 2>/dev/null &

#your application will block on this line, and will only continue if all 
#3 remotely executed scripts will complete
wait

上記では、マシン間でパスワードなしのログインを設定する必要があることに注意してください。そうしないと、ソリューションが壊れてパスワード入力を要求します。

于 2013-01-21T14:22:46.997 に答える
0

Perl を使用できる場合:

use Net::OpenSSH::Parallel;
use Data::Dumper;

my $pssh = Net::OpenSSH::Parallel->new;

$pssh->add_host('111.111.111.111');
$pssh->add_host('222.222.222.222');

$pssh->push('111.111.111.111', $cmd, $param11, $param12);
$pssh->push('222.222.222.222', $cmd, $param21, $param22);

$pssh->run;

if (my %errors = $ssh->get_errors) {
  print STDERR "ssh errors:\n", Dumper \%errors;
}
于 2013-01-22T10:25:59.090 に答える