リモートサーバーでローカルスクリプトを実行する必要があります。スクリプトを並列に実行することが重要です。
[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[ec2-user@ip-172-31-43-140 ~]$ cat hosts.txt | xargs -I {} ssh {} -T 'bash -s' < ./file.sh
ssh: Could not resolve hostname #!/bin/sh: Name or service not known
xargs: ssh: exited with status 255; aborting
[ec2-user@ip-172-31-43-140 ~]$
ベストアンサー1
私はこれを行うとき、次の形式が好きです。
$ cat hosts.txt | xargs -n1 -P8 sh -c 'ssh -T "$1" bash -s < ./hello.bash' sh
または{}
必要な場合:
$ cat hosts.txt | xargs -n1 -P8 -I{} sh -c 'ssh -T "$1" bash -s < ./hello.bash' sh {}
はい
hello.bash$ cat hello.bash
#!/bin/bash
echo "hi from server: $(hostname)"
SSH xargs
$ cat hosts.txt | xargs -n1 -P8 sh -c 'ssh -T "$1" bash -s < ./hello.bash' sh
hi from server: mulder.mydom.com
hi from server: skinner.mydom.com
hi from server: manny.mydom.com
詳細:
-n1 -P8
-xargs
1つの引数を入力として使用し、8つのインスタンスを実行するように指示します。ssh
sh -c 'ssh -T "$1"
- これはシェルを呼び出してコマンドを実行します。
-c "..."
$1
ここでは、注入攻撃を避けるために渡すことに注意してください。-T
擬似端末を無効にします。編集中のファイルの内容です$1
。cat
- これはシェルを呼び出してコマンドを実行します。
bash -s < ./hello.bash'
- 渡されるコマンドssh
sh
- 尾はsh
呼び出すシェル、パラメータ#0()に渡されます。xargs
$0