Executando o script de shell local em vários servidores remotos em paralelo e obtém o status

4

Eu preciso executar um script local em servidores remotos. Executar script para rodar em paralelo é importante.

[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 ~]$
    
por vishnu 21.07.2018 / 06:48

3 respostas

5

Eu gosto deste formulário ao fazer isso:

$ cat hosts.txt | xargs -n1 -P8 sh -c 'ssh -T "$1" bash -s < ./hello.bash' sh

Ou com {} se você precisar deles:

$ cat hosts.txt | xargs -n1 -P8 -I{} sh -c 'ssh -T "$1" bash -s < ./hello.bash' sh {}

Exemplo

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

Detalhes:

  • -n1 -P8 - informa xargs para receber 1 argumento como entrada e executar 8 instâncias de ssh
  • %código%
    • isso chama um shell e, em seguida, executa o comando após sh -c 'ssh -T "$1"
    • observe que estamos passando -c "..." aqui, para evitar ataques de injeção.
    • $1 desativa o pseudo terminal. -T é o conteúdo do arquivo sendo $1 'ed in.
  • cat - os comandos que serão passados para bash -s < ./hello.bash'
  • ssh - o trailing sh é o que é passado para sh como o shell a invocar, argumento # 0 ( xargs ).

Referências

por 21.07.2018 / 07:27
1

hello.bash :

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

Então faça:

. hello.bash
parallel --env doit --slf hosts.txt --tag --nonall doit
    
por 23.07.2018 / 13:01
0

Sim, você pode fazer isso com o gerente do AWS Systems. O AWS Systems Manager Run Command permite que você execute remotamente e com segurança conjuntos de comandos no EC2, bem como no servidor local. Abaixo estão as etapas de alto nível para conseguir isso.

Anexe a função IAM da instância: A instância do ec2 deve ter o papel do IAM com a política AmazonSSMFullAccess. Essa função permite que a instância se comunique com a API do Systems Manager.

Instale o Agente SSM: A instância do EC2 deve ter o agente SSM instalado. O Agente SSM processa as solicitações de comando de execução & configure a instância como por comando.

Executar comando: Exemplo de uso via AWS CLI: Em --instance-ids , forneça a lista de IDs de instância ec2. Execute o seguinte comando para recuperar os serviços em execução na instância. Substitua Instance-ID por id da instância ec2.

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

Mais informações aqui

    
por 28.09.2018 / 10:30