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
.
Hum, talvez pconsole seja a ferramenta que você deseja.
Há também ClusterSSH , que, bem, faz exatamente o que você pensa que faz. Yay para nomeação descritiva!
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 .
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.
Você deve verificar o Puppet aqui é um linux.com article sobre sua configuração e uso
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.
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.
Você também pode tentar ssh [[email protected]]hostname [command]
e, em seguida, percorrer os nomes de host.
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.
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.
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.)
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.
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.
Aqui estão alguns exemplos usando os comandos mencionados em outras respostas:
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 -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 -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
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
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.