Linux equivalente al control remoto "uno a muchos" de PowerShell

38

Viniendo de la administración de Windows, quiero profundizar en Linux (Debian). Una de mis preguntas candentes que no pude responder buscando en la web (no la encontré) es: ¿cómo puedo lograr la llamada comunicación remota "uno a muchos" como en PowerShell para Windows?

Para resumirlo en lo básico, diría:

Mi opinión sobre Linux:

  • Puedo ingresar a un servidor y escribir mi comando
  • Obtengo el resultado. Para un entorno de 10 servidores, ¿tendría que escribir un script (perl / python?) Enviando el comando para cada uno de ellos?

Mi experiencia de Windows:

  1. Escribo mi comando y con "invoke-command" puedo "enviar" esto a un grupo de servidores (tal vez desde un archivo de texto) para ejecutarlo simultáneamente y recuperar el resultado (como un objeto para más trabajo).

  2. Incluso puedo establecer varias sesiones, la conexión se mantiene en segundo plano y enviar comandos de forma selectiva a estas sesiones, y entrar y salir de forma remota como lo necesito.

(Escuché sobre chef, marionetas, etc. ¿Es algo así?)


Update 2019:
Después de probar un montón - Sugiero Rex (ver el comentario a continuación ) - Configuración fácil (efectivamente, sólo necesita ssh, nada más) y el uso (si usted sabe un poco de Perl es aún mejor, pero es opcional)
Con Rex (ify ) puede hacer un comando adhoc y avanzar a una administración de configuración real (... lo que significa: es un CM en primer lugar, pero también es bueno para tareas adhoc) El sitio web parece anticuado, pero actualmente (a partir del 01/2019) está en desarrollo activo y el canal IRC también está activo.

Con el nuevo openssh de Windows hay aún más posibilidades

puedes probar: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'

eli
fuente
paralela ssh puede hacerlo: serverfault.com/questions/2533/…
rogerdpack
MobaXTerm admite "ejecución múltiple" en muchas sesiones ssh: mobaxterm.mobatek.net/features.html (desplácese hacia abajo). Además, si su entorno de estación de trabajo principal es Windows, también es una herramienta bastante buena para conectarse a cajas de Linux y mucho más.
Kev
con tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Respuestas:

50

Resumen

  • Ansible es una herramienta DevOps que es un poderoso reemplazo para PowerShell
  • RunDeck como interfaz gráfica es útil
  • Algunas personas ejecutan RunDeck + Ansible juntos

clusterssh

Para enviar comandos remotos a varios servidores, para un principiante, recomendaría clusterssh

Para instalar clustersshen Debian:

apt-get install clusterssh

Otro tutorial de clusterssh :

ClusterSSH es un contenedor Tk / Perl alrededor de herramientas estándar de Linux como XTerm y SSH. Como tal, se ejecutará en casi cualquier sistema operativo compatible con POSIX donde existan las bibliotecas. Lo ejecuté en Linux, Solaris y Mac OS X. Requiere las bibliotecas Perl Tk (perl-tk en Debian o Ubuntu) y X11 :: Protocol (libx11-protocol-perl en Debian o Ubuntu), además de xterm y OpenSSH.

Ansible

En cuanto a un marco remoto para la administración de múltiples sistemas, Ansible es una alternativa muy interesante a Puppet. Es más delgado y no necesita agentes remotos dedicados, ya que funciona a través de SSH (también ha sido comprado por RedHat)

Los Playbooks son más elaborados que las opciones de línea de comandos.

Sin embargo, para comenzar a utilizar Ansible, necesita una instalación simple y configurar el archivo de texto de la lista de clientes.

Luego, para ejecutar un comando en todos los servidores, es tan simple como hacer:

ansible all -m command -a "uptime"

La salida también está muy bien formateada y separada por regla / servidor, y mientras se ejecuta en segundo plano se puede redirigir a un archivo y consultar más tarde.

Puede comenzar con reglas simples, y el uso de Ansible se volverá más interesante a medida que crezca en Linux, y su infraestructura se agrande. Como tal, hará mucho más que PowerShell.

Como ejemplo, un libro de jugadas muy simple para actualizar servidores Linux que escribí:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

También tiene muchos módulos definidos que le permiten escribir fácilmente políticas integrales.

Índice del Módulo - Documentación Ansible

También tiene un interesante centro oficial / red "social" de repositorios para buscar políticas ya formuladas por la comunidad. Galaxia ansible

Ansible también se usa ampliamente, y encontrará muchos proyectos en github, como este de mí para la configuración de FreeRadius .

Si bien Ansible es un marco de código abierto gratuito, también tiene una interfaz de panel web de pago, Ansible Tower, aunque la licencia es bastante cara.

Hoy en día, después de que RedHat lo compró, tower también tiene la versión de código abierto conocida como AWX .

Como beneficio adicional, Ansible también es capaz de administrar servidores Windows, aunque nunca lo he usado para eso.

También es capaz de administrar equipos de red (enrutadores, conmutadores y firewall), lo que lo convierte en una solución muy interesante como solución de automatización llave en mano.

Cómo instalar Ansible

Rundeck

Una vez más, para un marco remoto más fácil de usar, pero no tan potente como Ansible, recomiendo Rundeck .

Es una interfaz gráfica de inicio de sesión / multiusuario muy poderosa en la que puede automatizar gran parte de sus tareas cotidianas comunes e incluso ofrecer vistas diluidas a los sysops o al servicio de asistencia.

Cuando ejecuta los comandos, también le da ventanas con el resultado desglosado por servidor / tarea.

Puede ejecutar múltiples trabajos en segundo plano sin problemas y le permite ver el informe y la salida más adelante.

imagen de rundeck

Cómo instalar RunDeck

Tenga en cuenta que hay personas que ejecutan Ansible + RunDeck como una interfaz web; no todos los casos son apropiados para eso.

Tampoco hace falta decir que el uso de Ansible y / o RunDeck puede interpretarse como una forma o parte de la documentación de infraestructura, y con el tiempo permite replicar y mejorar las acciones / recetas / Playbooks.

Por último, hablando de un servidor de comando central, crearía uno justo para la tarea. En realidad, el término técnico es un cuadro de salto. Las 'cajas de salto' mejoran la seguridad, si las configura correctamente .

Rui F Ribeiro
fuente
1
Ansible es una gran solución frente a algún script o utilidad que simplemente transmite un comando a múltiples servidores SSH. Ansible hace eso (y es más adecuado para ese propósito que Puppet o Chef), pero también le da la opción de lograr su objetivo de una mejor manera, por ejemplo, utilizando un módulo incorporado para instalar algo de manera idempotente en lugar de simplemente enviar el comando de instalación y esperando lo mejor.
JBentley
12

También puede usar pssh(o parallel-ssh), que es un cliente SSH que se conecta a una lista de hosts y ejecuta el comando en todos los hosts en paralelo:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
morxa
fuente
11

Quizás pueda lograr su objetivo con una simple función zsh (bash). Supongamos que tiene servidores l61 l62 l63 y que a menudo necesita ejecutar un comando en ellos:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Entonces, en la línea de comando:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64
Sergei Kurenkov
fuente
55
Recomendaría imprimir el nombre de los servidores antes de su salida. Ejecutar el script en paralelo también conlleva otras peculiaridades, como alterar el resultado del script: se deben tomar medidas adicionales para preservar la actividad del resultado. La ejecución de cada tarea en primer plano también ofrece la posibilidad de una interacción mínima de entrada.
Rui F Ribeiro
3

Si está utilizando KDE, aquí hay otro método.
- Abra una ventana de Konsole.
Para cada servidor con el que desea comunicarse:
- abra una pestaña
- establezca una conexión ssh con el servidor
En el menú "Editar", seleccione "copiar entrada" a "todas las pestañas"

Cada comando que ingrese en esa pestaña se copiará a todos los servidores.
Puede cambiar de una pestaña a otra para ver los diferentes resultados.

Nota: mis etiquetas de menú (entre comillas) pueden estar equivocadas ya que no uso una versión en inglés de KDE

usuario161210
fuente
1

GNU paralelo

Permite líneas simples con configuraciones guardadas, por lo que puede crear un perfil, "prod", que contendrá una lista de servidores y conmutadores comunes. Luego simplemente agregue el comando que desee y estará listo. También puede copiar archivos a el servidor y los elimina automáticamente al final, y es bastante conveniente para scripts aún más grandes. También es muy rápido.

El único problema es que tiene tantas opciones;) Pero la documentación también incluye muchos ejemplos, por lo que puede verlos al principio.

alkuzad
fuente
2
Hola, bienvenido a Linux y Linux. Alguien ya dio un script usando gnu-parallel tiene un ejemplo. Le aconsejo que mire a su alrededor, apreciamos respuestas más elaboradas y le daremos más puntos.
Rui F Ribeiro
1
@RuiFRibeiro lo siento, no me di cuenta, por lo que la aplicación de Android tiene errores con los cuadros de código y no pude ver la mayoría del contenido (genera espacios en blanco en blanco). Usted mencionó que gnu-parallel es una salida confusa: puede escribirla en orden, pero debe decirle que lo haga :)
alkuzad
Sí, no estoy familiarizado con él, pero ya lo sospechaba, por lo tanto, mencionar la respuesta necesita mejorar. Gracias. Nada le impide escribir una mejor respuesta al respecto, sin embargo, para comentar, recomiendo comentar en esa respuesta.
Rui F Ribeiro
1

También quiero mencionar "Rex" aquí: https://www.rexify.org/

Es una herramienta increíble que utiliza perl + ssh (usuario / contraseña o autenticación de clave) y debido a que perl está instalado en todos los sistemas Linux (?!), Creo que parece más natural de usar (tiene algunas similitudes con Ansible & Co.)

puede ejecutar comandos adhoc en varios servidores a la vez (servidor1, servidor2, servidor ... - después de configurar la autenticación, o alternativamente usar los parámetros -p / -u y -s / -S para la ejecución de sudo del comando):

$ rex -H "server[1..3]" -e 'say run "uptime"'

o cree un archivo donde especifique diferentes "tareas" y llame desde allí

$ rex -f myConfigFile.rex uptime

Se puede instalar a través de repositorios o incluso con perls cpan (o cpanm Rex) y su configuración inicial es fácil, consulte:
- https://www.rexify.org/ o
- https://www.rexify.org/docs/guides/ start_using__r__ex.html y
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

eli
fuente