Linux - Executando o mesmo comando em várias máquinas ao mesmo tempo


39

Eu tenho cerca de uma dúzia de caixas Linux em que ocasionalmente preciso executar os mesmos comandos. Existe uma maneira mais fácil (ou automatizada) de fazer isso, além de fazer logon em cada máquina e executar o comando, um de cada vez? Não é o mesmo comando o tempo todo e não é um horário predefinido, portanto não é algo ideal para ferramentas como cron.



Finalmente, a lista canônica :)
rogerdpack

Respostas:


12

Talvez o console seja a ferramenta que você deseja.


Uau, pconsole parece muito legal! Eu instalei sem problemas e parece ser ótimo até agora. Obrigado!
Chris Bunch #

É uma das minhas ferramentas favoritas também. :) np


8

Você deve verificar o Puppet, aqui está um artigo do linux.com sobre sua configuração e uso


11
Hmm, Puppet parece bem interessante. Vou dar uma olhada se o console começar a falhar, pois já o tenho funcionando e é mais fácil do que aprender o idioma do Puppet. Obrigado pela sugestão!
Chris Bunch #

Especificamente, a ferramenta Marionette Collective (também chamada mcollective, ou mco). É uma parte do boneco que permite fazer coisas em um grupo de anfitriões, com base em fatos do boneco.
27717 Brian Minton


8

Você pode tentar Capistrano . Originalmente, é uma ferramenta de implantação do Rails, mas cresceu para fazer muitas coisas com máquinas remotas.

Para uma abordagem mais completa à administração de várias máquinas, experimente o Chef .



6

Acho que vou copiar e colar minha resposta do Stack Overflow , da qual as pessoas pareciam gostar. . .


O problema de como executar comandos em muitos servidores de uma só vez surgiu em uma lista de emails do Perl outro dia e darei a mesma recomendação que dei lá , que é usar gsh: http://outflux.net/unix/ software / gsh

O gsh é semelhante à " for box in box1_name box2_name box3_name" solução já fornecida, mas acho que o gsh é mais conveniente. Você configura um arquivo / etc / ghosts contendo seus servidores em grupos como web, db, RHEL4, x86_64 ou qualquer outra coisa (man ghosts) e depois usa esse grupo quando chama gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Você também pode combinar ou dividir grupos fantasmas, usando web + db ou web-RHEL4, por exemplo.

Mencionarei também que, embora nunca tenha usado o shmux, seu site contém uma lista de software (incluindo o gsh) que permite executar comandos em vários servidores ao mesmo tempo. Capistrano já foi mencionado e (pelo que entendi) também poderia estar nessa lista.


5

Se você estiver na área de trabalho do KDE, o konsole tem a opção "Enviar entrada para todas as sessões". Isso se aplica a todas as sessões abertas na mesma janela do konsole.


5

Você também pode tentar ssh [user@]hostname [command]percorrer os nomes dos hosts.


2
Isso realmente não satisfaz a parte "de uma só vez" (é serializada, não em paralelo), mas como isso não parece ser um requisito do corpo da pergunta, também pode ser uma solução decente.
voretaq7

4

Também dê uma olhada no func. O Func permite que você use uma arquitetura de módulo para controlar diferentes aspectos de um sistema, desde lidar com pacotes, executar comandos etc. Ele funciona em um módulo cliente / servidor sobre SSL e também possui um esquema de autenticação bastante flexível.


Junto com isso, o Func está sendo construído pela Red Hat e provavelmente verá um uso expandido nos futuros produtos do Fedora / RHEL. Definitivamente, este é um ponto de observação, pois espero que ele se torne a solução padrão de fato para esse tipo de problema.
22620 Christopher Cashell

4

Eu usei o ClusterSSH e funciona. No entanto, além de um certo número de terminais, ele não escala bem.

Estou surpreso que ninguém tenha mencionado xargs. Xargs é perfeito para a maioria das coisas. Na verdade, fiquei tão confortável com isso que nunca mais uso clusterssh.

Exemplo

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Reinicie o apache em todos os hosts da web.)


para os seguidores, os -P30meios de peça "executar 30 deles em paralelo"
rogerdpack

4

Se você já é um usuário tmux, poderá desfrutar do tmux-cssh (significa TMUX-C(luster)-SSH). Você fornece uma lista de nomes de servidores e ela abre uma nova janela do tmux com uma sessão SSH aberta para cada servidor em seu próprio painel. Todas as teclas são copiadas para cada janela. Dependendo do número de hosts, a saída pode ser difícil de ler.


11
Os links de uma linha não são necessariamente úteis. Por favor, seja descritivo. Por que você recomenda esta ferramenta?
Deer Hunter

3

Outras ferramentas são:

O RunDeck também pode ser descrito como o ControlTier leve.

Essas ferramentas não apenas fornecem um shell de cluster, mas também um front-end da Web e você pode salvar seus trabalhos para uso futuro.


2

Você também pode tentar o SSH de cluster (cssh). Eu não o usei, mas há um artigo no LinuxJournal.com chamado "Gerenciar vários servidores com eficiência" que fala sobre isso.


1

Use prato , simples e muito poderoso! Este script mudou minha vida :) Um script para governar todos eles!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

O shell de diligência 'dish' executa comandos via ssh / rsh / telnet / mysql simultaneamente em vários sistemas. Mudar a senha, atualizar a configuração, copiar arquivos, verificar o status etc. em centenas de nós é simplificado. O prato é semelhante ao 'dsh' (shell distribuído) da IBM, mas além disso permite a execução remota de comandos que exigem autenticação. Em comparação com outros pacotes de código aberto que incluem um shell distribuído (ou ferramentas similares) como ClusterIt, shell do dançarino, shell distribuído paralelo ou C3, o dish é um invólucro de shell remoto fino e fácil de usar para os casos em que é necessária uma solução flexível. Você pode navegar na página de manual do prato on-line aqui.


1

Aqui estão alguns exemplos usando os comandos mencionados em outras respostas:

pdsh

Pode assumir intervalos numéricos, as saídas com o nome do host primeiro, parecem realmente mantidas :

versão mais simples:

pdsh -w hostname echo done

saída:

hostname: done

Exemplo mais complicado:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

saída:

hostname8: done
hostname7: done
otherhost: done

Mac: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

precisa de configuração de shell remoto, caso contrário, ele usará "rsh", que pode ou não estar disponível.

Mac: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Todos eles podem obter a lista de máquinas de um arquivo, opcionalmente também.

Sinta-se livre para adicionar mais exemplos aqui, é um wiki da comunidade

Mac: brew install pssh

Cluster SSH

O cluster SSH (a "versão apenas para mac", aparentemente, existem duas versões que a outra está aqui ) na verdade abre "terminais reais" com um grande terminal na parte inferior que envia entrada para todos os outros. Portanto, é como uma interface do usuário que a envia para vários.

Ex:

csshX hostname0[1-2] hostname3 digite na caixa vermelha e ele vai para cada janela do terminal, uma por host, que é exibida.

mac: brew install csshx(uma versão antiga, mas ainda funciona)

há também um brew install ansibleFWIW

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.