Tengo alrededor de una docena de cajas de Linux en las que ocasionalmente necesito ejecutar los mismos comandos. ¿Existe 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
.
linux
remote-access
Chris Bunch
fuente
fuente
Respuestas:
Hm, tal vez pconsole es la herramienta que deseas.
fuente
También hay ClusterSSH , que, bueno, hace exactamente lo que crees que hace. ¡Yay para nombres descriptivos!
fuente
Debe consultar Puppet aquí, hay un artículo de linux.com sobre su configuración y uso
fuente
No pase por alto pssh y dsh tampoco; ambos son muy parecidos a gsh que @Philip Durbin mencionó.
fuente
Puedes probar Capistrano . Originalmente es una herramienta de implementación de 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 .
fuente
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
fuente
ansible
funciona bien con cientos de máquinas a la vez o puede limitarlo a n máquinas a la vezCreo 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 que hice allí , que es usar gsh: http://outflux.net/unix/ software / gsh
gsh es similar a la "
for box in box1_name box2_name box3_name
" solución ya dada pero encuentro 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 llama a gsh.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 ha sido mencionado y (por lo que entiendo) también podría estar en esa lista.
fuente
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.
fuente
También puede intentar
ssh [user@]hostname [command]
y luego recorrer los nombres de host.fuente
También eche un vistazo a func. Func le permite utilizar una arquitectura de módulo para controlar diferentes aspectos de un sistema, desde el manejo de paquetes hasta la ejecución de 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.
fuente
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
(Reinicie apache en todos los servidores web).
fuente
-P30
parte significa "ejecutar 30 de ellos en paralelo"Si ya es usuario de tmux, puede disfrutar de 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.fuente
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.
fuente
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.
fuente
¡Use un plato , simple y muy poderoso! Este guión cambió mi vida :) ¡Un guión 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 bailarín, shell distribuido en paralelo o C3, dish es un envoltorio de shell remoto delgado y fácil de usar para casos en los que se necesita una solución flexible. Puede navegar por la página del manual del plato en línea aquí.
fuente
Aquí hay algunos ejemplos que usan los comandos mencionados en otras respuestas:
pdsh
Puede tomar rangos numéricos, las salidas con el nombre de host primero, parecen realmente mantenidas :
versión más simple:
pdsh -w hostname echo done
salida:
Ejemplo más complicado:
pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"
salida:
Mac:
brew install pdsh
dsh
dsh -m user@host,user@host --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 user@host -H user@host "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 tiene dos versiones y la otra está 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 un
brew install ansible
FWIWfuente