Saltar al contenido principal

Ejecutar un comando en varios servidores SSH

Por Lucas Russo, desarrollador de SSHive · Actualizado el

Un bucle de shell, tmux, Ansible o la barra de difusión de SSHive: en qué destaca cada uno, con los comandos exactos, para elegir el adecuado según la tarea.

Tiempo estimado: 4 minutos

Comprobar el espacio libre en seis servidores, reiniciar el mismo servicio en todos, averiguar qué versión de OpenSSL tiene cada uno: tareas así aparecen cada semana, y hay cuatro formas sensatas de hacerlas desde un Mac. Tres solo necesitan herramientas que quizá ya tienes. La cuarta, la barra de difusión de SSHive, escribe en las sesiones que ya tienes abiertas. Cada paso de abajo es un método, con el comando para copiar y el punto en el que deja de ser la herramienta adecuada. Todos dan por hecho que entras con clave y no con contraseña: la guía de claves SSH lo prepara.

Paso a paso

  1. Un bucle de shell: automatizable, un servidor tras otro

    En el Terminal: for h in web1 web2 web3; do echo "== $h"; ssh -o BatchMode=yes "$h" 'df -h /'; done. Los nombres pueden ser alias Host de ~/.ssh/config. BatchMode=yes hace que ssh falle en lugar de quedarse parado en una petición de contraseña, por eso las claves van primero. La salida llega en orden, un host tras otro, fácil de guardar en un archivo o de comparar con la de la semana pasada. Sirve para todo lo que no es interactivo; no sabe responder a una pregunta ni manejar un editor, y con muchos hosts es lento, porque cada uno espera al anterior.
  2. tmux: un teclado, varias shells en vivo

    Instala tmux (brew install tmux), abre una ventana y divídela en un panel por servidor con Ctrl-b % (lado a lado) o Ctrl-b " (apilados), y lanza ssh a un servidor en cada uno. Pulsa Ctrl-b : y escribe setw synchronize-panes on: todo lo que escribas va ahora a todos los paneles de esa ventana, incluidas las respuestas a preguntas y las teclas dentro de programas a pantalla completa, y los ves todos a la vez. setw synchronize-panes off devuelve a cada panel su propio teclado. No hay nada que instalar en los servidores; es la herramienta para trabajo interactivo en un puñado de máquinas.
  3. Ansible ad hoc: en paralelo, con un informe por host

    ansible all -i 'web1,web2,web3,' -a 'df -h /' ejecuta el comando en los tres hosts, cinco a la vez por defecto (-f lo cambia), y muestra cada resultado bajo el nombre del host con su estado. La coma final le dice a Ansible que la lista es un inventario, no un nombre de archivo. Necesita Ansible en el Mac y Python en los servidores, y es la herramienta adecuada en cuanto algo puntual se convierte en una rutina semanal: ese es el momento de pasarlo a un playbook.
  4. La barra de difusión de SSHive: las sesiones que ya tienes abiertas (Pro)

    Conéctate a cada servidor; cada uno es una pestaña SSH. Haz clic en el botón de difusión de la barra de herramientas del terminal: se abre encima del terminal una barra naranja DIFUSIÓN con un contador, Sesiones (N). Escribe el comando en el campo propio de la barra y pulsa Intro, o haz clic en Enviar. SSHive lo escribe en cada sesión SSH conectada, seguido de Intro, un aviso confirma cuántas sesiones lo recibieron y la salida de cada servidor queda en su propia pestaña. No hay selección por sesión ni grupos guardados: para dejar fuera un servidor, desconéctalo antes. Escape en el campo, o la ×, cierra la barra. La difusión es de Pro y solo existe en la app de Mac; en la versión gratuita el botón lleva la etiqueta PRO.

Preguntas frecuentes

¿Cuál de las cuatro debo usar?+
El bucle para scripts y todo lo que quieras en un archivo de registro. tmux cuando los servidores necesitan que respondas a preguntas o que manejes a la vez una herramienta a pantalla completa. Ansible cuando el mismo cambio debe ser repetible, en paralelo y con informe. La barra de difusión de SSHive para una comprobación rápida en las sesiones ya abiertas en SSHive, cuando quieres cada respuesta en su pestaña y no en un único flujo que se desplaza.
¿Puedo difundir solo a una parte de las sesiones?+
No. La barra de difusión no tiene filtro por sesión: el comando sale hacia todas las sesiones SSH conectadas de golpe, y el contador de la barra te dice cuántas son. Para dejar fuera un host, desconecta su sesión antes de enviar. Para un subconjunto fijo, el bucle de shell o Ansible de arriba te dejan nombrar los hosts.
¿La difusión está en la app de iPhone y iPad?+
No. La difusión es una de las funciones que solo existen en la app de Mac.

Funciones de SSHive relacionadas

Modo difusión

Ejecución en varios servidores

Terminal SSH

Terminal acelerado por GPU

Comandos rápidos

Biblioteca de comandos reutilizables

Prueba SSHive gratis en macOS

Consigue el cliente todo en uno de SSH, SFTP, RDP y VNC para Mac. Descarga gratuita, sin registro.

Descargar SSHive gratis