複数のリモートサーバーでローカルシェルスクリプトを並列に実行し、ステータスを取得します。

複数のリモートサーバーでローカルシェルスクリプトを並列に実行し、ステータスを取得します。

リモートサーバーでローカルスクリプトを実行する必要があります。スクリプトを並列に実行することが重要です。

[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- xargs1つの引数を入力として使用し、8つのインスタンスを実行するように指示します。ssh
  • sh -c 'ssh -T "$1"
    • これはシェルを呼び出してコマンドを実行します。-c "..."
    • $1ここでは、注入攻撃を避けるために渡すことに注意してください。
    • -T擬似端末を無効にします。編集中のファイルの内容です$1cat
  • bash -s < ./hello.bash'- 渡されるコマンドssh
  • sh- 尾はsh呼び出すシェル、パラメータ#0()に渡されます。xargs$0

引用する

答え2

hello.bash:

doit() {
  echo Define
  echo what you want done in a
  echo function
}
export -f doit

次に、次のようにします。

. hello.bash
parallel --env doit --slf hosts.txt --tag --nonall doit

答え3

はい、AWS Systems Managerではこれを行うことができます。 AWS Systems Manager Run Command を使用すると、EC2 およびオンプレミスサーバーでコマンドセットをリモートで安全に実行できます。この目標を達成するための概略的なステップは次のとおりです。

リンクされたインスタンスIAMロール:ec2インスタンスには、AmazonSSMFullAccessポリシーを含むIAMロールが必要です。この役割により、インスタンスはSystems Manager APIと通信できます。

SSMエージェントのインストール:SSMエージェントはEC2インスタンスにインストールする必要があります。 SSM エージェントはコマンド実行要求を処理し、コマンドに基づいてインスタンスを構成します。

実行コマンド:AWS CLIによる使用例:--instance-idsec2インスタンスIDのリストを提供します。次のコマンドを実行して、インスタンスで実行されているサービスを検索します。 Instance-ID を ec2 インスタンス ID に置き換えます。

aws ssm send-command --document-name "AWS-RunShellScript" --comment "listing services" --instance-ids "Instance-ID" --parameters commands="service --status-all" --region us-west-2 --output text

追加情報ここ

関連情報