Execute o mesmo script em vários servidores através do SSH

4

Eu regularmente preciso atualizar alguns servidores Ubuntu 12.04 (Precise Pangolin) ( Rackspace ).

O que eu faço agora é:

  • Copiar um arquivo para um servidor usando SCP
  • Faça logon no servidor usando SSH
  • Pare o Tomcat
  • Fazer algumas cópias e mover o arquivo enviado
  • Iniciar o Tomcat

Repita exatamente o mesmo processo com o mesmo arquivo no segundo servidor (12 servidores agora e o número está crescendo).

É possível escrever um script que percorra uma lista de servidores e faz tudo isso por mim?

Como eu faria isso? De preferência, a solução não necessitaria da instalação de qualquer material. A maioria dentro da empresa trabalha em MacBooks, mas as VMs do Windows são abundantes.

Idealmente, os servidores a serem atualizados podem ser simplesmente adicionados / removidos para alterar a lista de servidores. No entanto, qualquer solução que me poupa o tempo de fazer a mesma coisa +12 vezes é muito apreciada:)

    
por Henrov 08.09.2015 / 16:02

4 respostas

4

Existem várias soluções para isso - você quer manter o controle manual das etapas e simplesmente executá-las simultaneamente? O olhar em CSSH (se você estiver vindo de um sistema Linux) ou SuperPutty (se você estiver vindo de um sistema Windows). Se você simplesmente quer automatizar tudo, veja Espere .

    
por 08.09.2015 / 16:06
4

@Dave

Dependendo do script, você pode executar todo o ssh:

for server in s1 s2 s3; do
    ssh $server "command one; command two; ..."
done

Ou divida-o em várias chamadas:

for server in s1 s2 s3; do
    ssh $server command one
    ssh $server command two
    ...
done

Sinta-se à vontade para adicionar isso à sua resposta, apenas passando ..

    
por 09.09.2015 / 02:49
3

Faça um favor a si mesmo e confira Ansible . Parece que é exatamente o que você precisa. Ele usa SSH e expande facilmente, tudo o que você precisa fazer é adicionar os servidores à lista conforme necessário. Aprender a fazer um livro de exercícios te levará uma tarde e economizará incontáveis horas no futuro.

    
por 08.09.2015 / 16:40
3

Como outros já mencionaram, existem ferramentas projetadas para gerenciar múltiplas máquinas, mas para uma solução puramente bash você pode escrever um loop for e executar comandos através de ssh em um punhado de nós.

Assumindo que host1 e host2 são os nomes de host de pessoas que você deseja que isso aconteça de:

for node in host1 host2; do
    scp /tmp/script.sh user@$node:/tmp/script.sh
    if [[ "$?" == "0" ]];then #checks that last command didn't return an error
        ssh -oBatchMode=yes user@$node /tmp/script.sh
    fi
done

Se você for usar essa solução, recomendo configurar as chaves ssh para que você não precise inserir a senha todas as vezes. A opção BatchMode fará com que o script pule em vez de esperar pela entrada, você pode decidir se é preferível.

    
por 08.09.2015 / 17:02