Existem várias ferramentas disponíveis para fazer o que você deseja. Meu favorito é o pdsh , que inclui um pdcp
(multi-host scp), pdsh
(multi-host scp) host ssh) e dshbak
(exibir saída de vários hosts agrupada por host) - dshbak
é útil porque o pdsh executa comandos em paralelo em vários hosts, não em um host após o outro. Eu usei o pdsh várias vezes em clusters, VMs, servidores de nuvem e pequenos e grandes grupos de máquinas físicas. Ele faz bem o trabalho e é fácil de configurar.
O pdsh está disponível pré-empacotado para a maioria das distros.
Para usá-lo, você criaria um arquivo de hosts (por padrão, / etc / genders) contendo nomes de host e uma lista separada por vírgulas de nomes de "grupos" aos quais eles pertencem. Cada host pode pertencer a um ou mais grupos - por exemplo, alguns hosts podem estar no grupo "webserver", alguns no grupo "dbserver" e todos os hosts no grupo "all". Por exemplo:
somemachineA all
somemachineB all
Então você usaria pdcp para copiar seu script para todos os hosts no grupo "all":
pdcp -g all commands.sh /tmp/
(Nota: / tmp nos hosts remotos devem ser montados com exec privs - padrão para a maioria dos sistemas de arquivos, mas não é incomum que / tmp seja montado noexec para fins de segurança. Nesse caso, pdcp o script para algum outro lugar ou invocá-lo com, por exemplo, bash /tmp/commands.sh
em vez de apenas /tmp/commands.sh
?)
Em seguida, execute o script em todos os hosts:
pdsh -g all /tmp/commands.sh >& /tmp/commands.log
(Nota: isso pressupõe que o ssh foi configurado em todos os hosts para login sem senha, isto é, usando uma chave ssh em vez de uma senha. Se não for esse o caso, provavelmente é melhor não redirecionar a saída para um arquivo de log , porque isso tornaria o uso interativo difícil. Você realmente deve configurar os hosts remotos para o acesso à chave ssh e, em seguida, desativar os logins de senha)
quando terminar, você poderá ver o log com o dshbak:
dshbak /tmp/commands.log | less
Finalmente, uma coisa útil para saber sobre o pdsh etc é que, por padrão, ele tentará usar o rsh em vez do ssh. Eu não tenho ideia do porquê, porque ninguém sã usa o rsh mais ... ele é facilmente corrigido, basta criar um arquivo chamado /etc/pdsh/rcmd_default
e adicionar uma linha contendo apenas ssh
.