it-swarm-pt.tech

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

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.

39
Chris Bunch

Hum, talvez pconsole seja a ferramenta que você deseja.

12
Node

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

15
Jörg W Mittag

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

8
pjz

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

Para uma abordagem mais completa à administração de várias máquinas, você pode tentar Chef .

8
rkj

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

http://docs.ansible.com/intro_adhoc.html

8
Robert

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

8
trent

Acho que vou copiar e colar minha resposta do Stack Overflow , que 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 eu dei lá , que é usar gsh: http://outflux.net/unix/software/gsh

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

[[email protected] ~]$ 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
[[email protected] ~]$

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 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.

6
Philip Durbin

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

5
rgmarcha

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

5
Jason V.

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.

4
Stick

Se você já é usuário do tmux, poderá desfrutar de 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.

4
appleshampoo

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.)

4
JDS

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 uma interface da Web e você pode salvar seus trabalhos para uso futuro.

3
Christian

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.

2
Brad Beyenhof

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

pdsh

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

versão mais simples:

pdsh -w hostname echo done

resultado:

hostname: done

Exemplo mais complicado:

pdsh -w [email protected][7-8],[email protected] "sleep 5 && echo done"

resultado:

hostname8: done
hostname7: done
otherhost: done

mac: brew install pdsh

dsh

dsh -m [email protected],[email protected] --remoteshell ssh --concurrent-Shell -- "sleep 5 && echo done"

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

mac: brew install dsh

pssh

pssh -i -H [email protected] -H [email protected] "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

SSH do cluster

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

Ex:

csshX hostname0[1-2] hostname3 digite na caixa vermelha e ela será exibida em cada janela do terminal, uma por host, que será exibida.

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

há também um brew install ansible FWIW

1
rogerdpack

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

A diligência do Shell '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 requerem 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
Guillaume