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
.
linux
remote-access
Chris Bunch
fonte
fonte
Respostas:
Talvez o console seja a ferramenta que você deseja.
fonte
Há também o ClusterSSH , que, bem, faz exatamente o que você pensa que faz. Yay para nomeação descritiva!
fonte
Você deve verificar o Puppet, aqui está um artigo do linux.com sobre sua configuração e uso
fonte
Não negligencie pssh e dsh também; ambos são muito parecidos com o gsh que @Philip Durbin mencionou.
fonte
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 .
fonte
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
fonte
ansible
funciona bem com centenas de máquinas de uma só vez ou você pode limitá-lo a n máquinas de cada vezAcho 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.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.
fonte
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.
fonte
Você também pode tentar
ssh [user@]hostname [command]
percorrer os nomes dos hosts.fonte
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.
fonte
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
(Reinicie o apache em todos os hosts da web.)
fonte
-P30
meios de peça "executar 30 deles em paralelo"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.fonte
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.
fonte
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.
fonte
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.
fonte
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:
Exemplo mais complicado:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
saída:
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 ansible
FWIWfonte