it-swarm-es.com

Linux: ejecutar el mismo comando en muchas máquinas a la vez

Tengo alrededor de una docena de cajas de Linux en las que ocasionalmente necesito ejecutar los mismos comandos. ¿Hay una manera más fácil (o automática) de hacer esto además de iniciar sesión en cada máquina y ejecutar el comando, uno a la vez? No son los mismos comandos todo el tiempo y no está en un tiempo preestablecido, por lo que no es algo ideal para herramientas como cron.

39
Chris Bunch

Hm, tal vez pconsole es la herramienta que deseas.

12
Node

También hay ClusterSSH , que, bueno, hace exactamente lo que crees que hace. ¡Yay por nombres descriptivos!

15
Jörg W Mittag

No pase por alto pssh y dsh tampoco; ambos son muy parecidos a gsh que @Philip Durbin mencionó.

8
pjz

Puedes probar Capistrano . Originalmente es una herramienta de implementación Rails), pero creció para hacer muchas cosas con máquinas remotas.

Para un enfoque más completo para la administración de múltiples máquinas, puede probar Chef .

8
rkj

Ansible tiene la capacidad de hacer comandos ad hoc y también se puede expandir para hacer una gestión de configuración completa. La capacidad de emparejar en base a grupos es excelente.

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

8
Robert

Debe consultar Puppet aquí es linux.com artículo en su configuración y uso

8
trent

Supongo que copiaré y pegaré mi respuesta de Stack Overflow , que a la gente parecía gustarle. . .


El problema de cómo ejecutar comandos en muchos servidores a la vez apareció en una lista de correo de Perl el otro día y le daré la misma recomendación di allí , que es usar gsh: http://outflux.net/unix/software/gsh

gsh es similar a "for box in box1_name box2_name box3_name "ya se ha dado la solución, pero considero que gsh es más conveniente. Configura un archivo/etc/ghosts que contiene sus servidores en grupos como web, db, RHEL4, x86_64 o lo que sea (man ghosts) y luego usa ese grupo cuando llamas a 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] ~]$

También puede combinar o dividir grupos fantasma, usando web + db o web-RHEL4, por ejemplo.

También mencionaré que aunque nunca he usado shmux, su sitio web contiene una lista de software (incluido gsh) que le permite ejecutar comandos en muchos servidores a la vez. Capistrano ya se ha mencionado y (por lo que entiendo) también podría estar en esa lista.

6
Philip Durbin

Si está en un escritorio KDE, konsole tiene la opción "Enviar entrada a todas las sesiones". Se aplica a todas las sesiones abiertas en la misma ventana de Konsole.

5
rgmarcha

También puedes probar ssh [[email protected]]hostname [command] y luego recorre los nombres de Host.

5
Jason V.

También eche un vistazo a func. Func le permite usar una arquitectura de módulo para controlar diferentes aspectos de un sistema, desde tratar con paquetes hasta ejecutar comandos, etc. Funciona en un módulo cliente/servidor a través de SSL y también tiene un esquema de autenticación bastante flexible.

4
Stick

Si ya es usuario de tmux, puede disfrutar tmux-cssh (significa TMUX-C(luster)-SSH). Le da una lista de nombres de servidores y abre una nueva ventana tmux con una sesión SSH abierta para cada servidor en su propio panel. Todas las pulsaciones de teclas se copian en cada ventana. Dependiendo del número de hosts, la salida puede ser difícil de leer.

4
appleshampoo

He usado ClusterSSH y funciona. Sin embargo, más allá de un cierto número de terminales, no escala bien.

Me sorprende que nadie haya mencionado xargs. Xargs es perfecto para la mayoría de las cosas. De hecho, me he sentido tan cómodo con él que ya nunca uso clusterssh.

Ejemplo

echo -n Host1 Host2 Host3 Host4|xargs -d" " -n1 -P30 -I+ ssh + "Sudo service Apache2 restart"

(Reinicie Apache en todos los servidores web).

4
JDS

Otras herramientas son:

RunDeck también podría describirse como el ControlTier ligero.

Estas herramientas no solo le brindan un Shell de clúster, sino también una interfaz web y puede guardar sus trabajos para su uso futuro.

3
Christian

También puede probar Cluster SSH (cssh). No lo he usado, pero hay un artículo en LinuxJournal.com llamado "Administrar servidores múltiples de manera eficiente" que habla de ello.

2
Brad Beyenhof

Aquí hay algunos ejemplos que usan los comandos mencionados en otras respuestas:

pdsh

Puede tomar rangos numéricos, las salidas con el nombre del Host primero, parecen en realidad mantenidas :

versión más simple:

pdsh -w hostname echo done

salida:

hostname: done

Ejemplo más complicado:

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

salida:

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"

necesita una configuración de Shell remota; de lo contrario, usará "rsh", que puede o no estar disponible.

mac: brew install dsh

pssh

pssh -i -H [email protected] -H [email protected] "sleep 5 && echo done"

Todos pueden tomar una lista de máquinas de un archivo, opcionalmente, también.

Siéntase libre de agregar más ejemplos aquí, es un wiki comunitario

mac: brew install pssh

Cluster SSH

El clúster SSH (la "versión solo para Mac" aparentemente hay dos versiones, la otra es aquí ) en realidad abre "terminales reales" con un terminal grande en la parte inferior que envía información a todos los demás. Entonces es como una interfaz de usuario que lo envía a múltiples.

Ex:

csshX hostname0[1-2] hostname3 luego escriba en el cuadro rojo y se dirige a cada ventana de terminal, una por Host, que aparece.

mac: brew install csshx (una versión anterior pero aún funciona)

también hay una brew install ansible FWIW

1
rogerdpack

Use plato , simple y muy poderoso! Este script cambió mi vida :) ¡Un script para gobernarlos a todos!

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

La diligencia Shell 'dish' ejecuta comandos vía ssh/rsh/telnet/mysql simultáneamente en varios sistemas. Cambiar la contraseña, actualizar la configuración, copiar archivos, verificar el estado, etc. en cientos de nodos se simplifica. Dish es similar al 'dsh' (Shell distribuido) de IBM, pero además permite la ejecución remota de comandos que requieren autenticación. En comparación con otros paquetes de código abierto que incluyen un Shell distribuido (o herramientas similares) como ClusterIt, Shell de bailarina, Shell distribuido en paralelo o C3, Dish es un envoltorio remoto remoto delgado y fácil de usar para los casos en que se necesita una solución flexible. Puede navegar por la página del manual del plato en línea aquí.

1
Guillaume