Linux - executando o mesmo comando em muitas máquinas ao mesmo tempo

39

Eu tenho cerca de uma dúzia de caixas Linux que ocasionalmente preciso executar o (s) mesmo (s) comando (s). 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 são os mesmos comandos o tempo todo e não estão em um tempo predefinido, então não é algo ideal para ferramentas como cron .

    
por Chris Bunch 01.05.2009 / 17:46

16 respostas

12

Hm, talvez o pconsole seja a ferramenta que você quer.

    
por 01.05.2009 / 17:49
15

Há também ClusterSSH , que, bem, faz exatamente o que você acha que faz. Yay por nomeação descritiva!

    
por 01.05.2009 / 18:29
8

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

    
por 01.05.2009 / 17:53
8

Não ignore pssh e dsh também; ambos são muito parecidos com o gsh que @Philip Durbin mencionou.

    
por 04.05.2009 / 18:49
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 múltiplas máquinas, você pode querer experimentar o Chef .

    
por 01.05.2009 / 19:52
8

O Ansible tem a capacidade de executar comandos ad hoc e também é expansível para fazer o gerenciamento de configuração completo. A capacidade de combinar com base em grupos é excelente.

link

    
por 07.07.2015 / 00:31
6

Eu acho que vou copiar e colar minha resposta do Stack Overflow , que as pessoas pareciam gostar. . .

A questão de como executar comandos em muitos servidores de uma vez apareceu em uma lista de discussão Perl outro dia e eu darei a mesma recomendação Eu dei lá , que é usar o gsh: link

O gsh é semelhante à solução " for box in box1_name box2_name box3_name " já fornecida, mas acho o gsh mais conveniente. Você configura um arquivo / etc / ghosts contendo seus servidores em grupos como web, db, RHEL4, x86_64, ou o que for (man ghosts), então você usa esse grupo quando você 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.

Também mencionarei que, embora eu nunca tenha usado o shmux, o seu site contém uma lista de softwares (incluindo o gsh) que permite executar comandos em vários servidores de uma só vez. Capistrano já foi mencionado e (pelo que entendi) poderia estar nessa lista também.

    
por 01.05.2009 / 21:00
5

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

    
por 29.05.2009 / 21:10
5

Você também pode tentar ssh [user@]hostname [command] e, em seguida, percorrer os nomes de host.

    
por 19.12.2011 / 22:24
4

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

    
por 29.05.2009 / 20:43
4

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

Estou surpreso que ninguém tenha mencionado xargs. Xargs é perfeito para a maioria das coisas. Na verdade, fiquei tão à vontade 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.)

    
por 30.09.2013 / 16:50
4

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

    
por 07.07.2015 / 01:25
3

Outras ferramentas são:

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

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.

    
por 29.03.2012 / 15:13
2

Você também pode tentar o Cluster SSH (cssh). Eu não usei, mas há um artigo no LinuxJournal.com chamado "Manage Multiple Servers Efficiently" que fala sobre isso.

    
por 29.05.2009 / 21:00
1

Use dish , simples e muito poderoso! Este script mudou minha vida :) Um script para governá-los todos!

link

O shell 'prato' diligence executa comandos via ssh / rsh / telnet / mysql simultaneamente em vários sistemas. Mudando senha, atualizando configuração, copiando arquivos, verificando status, etc. em centenas de nós é feito então simples. Dish é similar ao 'dsh' (shell distribuído) da IBM, mas além disso permite a execução remota de comandos que requerem autenticação. Comparado a outros pacotes de código aberto que incluem um shell distribuído (ou ferramentas similares) como ClusterIt, shell de dancer, shell distribuído paralelo ou C3, dish é um empacotador de shell remoto fino e fácil de usar para casos em que uma solução flexível é necessária. Você pode navegar na página de manual do prato on-line aqui.

    
por 10.06.2009 / 17:16
1

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

pdsh

Pode levar intervalos numéricos, saídas com o nome do host em primeiro lugar, parece realmente mantido :

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 do shell remoto, caso contrário, 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 pegar listas de máquinas de um arquivo, opcionalmente também.

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

mac: brew install pssh

SSH do cluster

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

Ex:

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

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

há também brew install ansible FWIW

    
por 22.02.2018 / 23:32