Pssh – herramienta para ejecutar comandos en múltiples servidores vía ssh

Recientemente, en un curso impartido en la empresa donde trabajo, el instructor utilizó una herramienta muy interesante, llamada Pssh, que nos permite ejecutar comandos en múltiples servidores, vía ssh, de manera simultanea. Así que de eso va el artículo 🙂

Un poco sobre SSH

Está claro, OpenSSH es una herramienta fundamental para cualquier administrador de sistemas, incluso para usuarios domésticos. Que nos permite conectarnos de manera remota y segura a los servidores que administramos.

El problema es que cuando queremos ejecutar un comando en más de un servidor, debemos tirar de scripts, ya que esa función no viene predeterminada.  En esta parte del partido es donde entra Parallel SSH o Pssh.

Se trata de una aplicación escrita en python, que nos permite ejecutar comandos de manera paralela (de ahí el nombre)

Realmente se puede considerar PSSH  como una caja de herramientas, ya que incluye diferentes programas que nos permiten interactuar con diferentes hosts de manera simultanea. Estas son:

  • pssh – Tal y como hemos comentado permite ejecutar comandos en múltiples hosts de manera simultanea
  • pnuke – Permite matar los mismos procesos en múltiples hosts de manera paralela
  • pscp – Un programa dedicado a copiar ficheros de manera paralela en múltiples hosts
  • prsync – Se encarga de copiar ficheros en múltiples hosts
  • pslurp – Copia ficheros desde múltiples hosts remotos hacia un único host

Instalación de Pssh

En sistemas basados en RHEL como Fedora o Centos, la instalación es la siguiente. Primero de todo hemos de instalar el paquete python-pip, que nos permitirá instalar paquetes escritos en python en el host.  Depende de la versión de nuestro sistema operativo, debemos utilizar el comando yum o dnf. De este programa ya hablé en un artículo anterior.

Sería así:

  1. #Utilizando yum, previamente instalado el repositorios EPEL
  2. yum install epel-release -y
  3. yum install python-pip
  4. #Utilizando dnf
  5. dnf install pyton-pip

Una vez instalado este paquete, sólo debemos escribir:

  1. pip install pssh

Continuemos.

En sistemas basados en Debian, Ubuntu, LinuxMint y resto de fauna y flora , sería como sigue:

  1. #En sistemas viejunos
  2. sudo apt-get install python-pip
  3. #En sistemas más actuales
  4. sudo apt install python-pip
  5. #En ambos casos, el segundo paso:
  6. pip install pssh

En sistemas tipo Arch, podemos encontrar información sobre el paquete en el repositorio AUR.

Por último, que no menos importante, en sistemas SLES y OpenSUSE, podemos utilizar la siguiente instalación. Aunque lo más probable es que ya venga instalado por defecto.

Trabajando con PSSH

La forma de utilizar el comando es crear un ficheros, donde indicaremos todos los hosts a los que nos conectaremos de forma habitual. Vamos a crear un fichero con los datos:

  1. #Creamos el fichero
  2. vi /home/davidochobits/servidores
  3. #Añadimos los servidores habituales
  4. [usuario@]IP_del_servidor[:puerto]
  5. ....

Para que no nos pida la contraseña, lo ideal es que tengamos el intercambio de llaves hecho con estos servidores.

De hecho, si no realizamos dicho intercambio, nos aparecerá el siguiente mensaje:

  1. Stderr: pssh error: SSH requested a password. Please create SSH keys or use
  2. the -A option to provide a password.

Para ejecutar el comando sería:

  1. #Un ejemplo
  2. pssh -i -h servidores uptime

Laboratorio de pruebas

A modo de muestra he realizado varias pruebas en hosts virtuales, en una red local. Una vez añadida la información de los servidores, en el fichero /etc/hosts y realizado el intercambio llaves (podéis seguir este tutorial), ya podemos ver el programa en funcionamiento:

Si queremos ampliar información sobre el comando, siempre podemos consultar su página de man o bien utilizar la ayuda pssh --help

Mientras escribía el artículo escuchaba la música de la banda Tool

Nos vamos leyendo ^.^