Table of Contents

Ejecutar un comando en múltiples servidores SSH desde la linea de comandos

Hay múltiples formas de ejecutar comandos en varios servidores SSH sin tener la necesidad de ir uno por uno ingresando el mismo comando. Aplicaciones para realizar esa tarea y además de forma simultanea hay de sobra, pero aquí se expone un método muy simple que no requiere nada más que la bash para ejecutar, no ofrece la ejecución simultanea

Creamos un fichero servers.txt con el listado de los servidores a los que queremos conectar.

dominio1.com
dominio2.com
dominio3.com

Se recomienda tener configuradas las claves SSH en el cliente, de esa forma no es necesario ingresar la password en cada servidor.

Utilizando un bucle While.

while read HOST ; do ssh -n USUARIO@$HOST "grep -ir 'virus.exe' /var/log/nginx/"; done < servers.txt

Utilizando un bucle for.

for HOST in $(cat servers.txt); do ssh -n USUARIO@$HOST "grep -ir 'virus.exe' /var/log/nginx/"; done

Comprobar qué servidor NO está ejecutando un determinado proceso.

for i in `cat servers.txt`; do RES=`ssh USUARIO@${i} "ps -ef " |awk '/[p]roceso_nombre/ {print $2}'`; test "x${RES}" = "x" && echo $i; done

Otras alternativas más completas

Múltiples comandos (interactivos) en múltiples servidores SSH desde la terminal simultáneamente

Con Tmux (alternativa a “screen” recomendada) es posible ejecutar el mismo comando en todas las terminales bajo su control de manera simultanea, eso se puede hacer mediante el comando “:setw synchronize-panes”.

Para ello se debe arrancar tmux, abrir las terminales que se necesiten y conectar mediante ssh u otro protocolo a los servidores deseados. Pulsar “Cntrl + B” y teclear el siguiente comando.

# Activar.
":setw synchronize-panes"
# Desactivar: Con ejecutar de nuevo el comando es suficiente, pero se puede indicar si se desea "off".
":setw synchronize-panes off"