viernes, 28 de diciembre de 2018

Parallel SSH - Ejecutar comandos remotos en multiples servidores

Todos sabemos que es SSH y que podemos hacer con él, pero hoy vamos a ver Parallel SSH.

Que es Parallel SSH:

Es un comando ó herramienta que nos permite conectarnos a varios servidores simultáneamente mediante SSH y poder ejecutar comandos sin ingresar uno por uno para ejecutarlos.

Instalamos el parallel-ssh:
root@debian:~# apt-get install pssh

Vemos como usarlo: 
root@debian:~# parallel-ssh --help
Usage: parallel-ssh [OPTIONS] command [...]
Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -h HOST_FILE, --hosts=HOST_FILE
                        hosts file (each line "[user@]host[:port]")
  -H HOST_STRING, --host=HOST_STRING
                        additional host entries ("[user@]host[:port]")
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  -o OUTDIR, --outdir=OUTDIR
                        output directory for stdout files (OPTIONAL)
  -e ERRDIR, --errdir=ERRDIR
                        output directory for stderr files (OPTIONAL)
  -t TIMEOUT, --timeout=TIMEOUT
                        timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -i, --inline          inline aggregated output and error for each server
  --inline-stdout       inline standard output for each server
  -I, --send-input      read from standard input and send as input to ssh
  -P, --print           print output as we get it
Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime


Editamos el archivo donde pondremos ip's de los servidores donde ejecutaremos los comandos:
root@debian:~# vi hosts.txt
192.168.0.100
192.168.0.200

Ejecutamos el comando en ambos servidores:
root@debian:~# parallel-ssh -h hosts.txt -l root -o /tmp/salida uptime
[1] 09:52:12 [SUCCESS] 192.168.0.100
[2] 09:52:12 [SUCCESS] 192.168.0.200 

-h listado de servidores donde ejecutaremos los comandos
-l usuario con el que se conectará por ssh. Tener en cuenta que debe tener configuradas las keys ssh para que no pida password.
-o directorio de salida donde mostrará la salida de cada comando
uptime el comando que ejecutará en cada servidor remoto


Vemos la salida de cada ip en la ruta que le pasamos con el -o: 
root@debian:~# ls -lat /tmp/salida.txt/
total 1930
drwxrwxrwt 7 root root 1971200 Dec 28 09:55 ..
-rw-r--r-- 1 root root      74 Dec 28 09:52 192.168.0.100
-rw-r--r-- 1 root root      73 Dec 28 09:52 192.168.0.200
drwxr-xr-x 2 root root    1024 Dec 28 09:51 .

Vemos el resultado de cada server:
root@debian:~# cat /tmp/salida.txt/192.168.0.100
  9:52am  up 100 day(s), 16:24,  9 users,  load average: 0.06, 0.07, 0.06 
root@debian:~# cat /tmp/salida.txt/192.168.0.200
  9:52am  up 85 day(s), 17:12,  0 users,  load average: 0.11, 0.18, 0.19

En caso que no tengamos las keys ssh podremos ingresar el password:

root@debian:~# parallel-ssh -h hosts.txt -A -O PreferredAuthentications=password uptime
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: acáVaLaClaveDeRoot
[1] 12:08:27 [SUCCESS] 192.168.0.100
[2] 12:08:27 [SUCCESS] 192.168.0.200