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
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"