PSSH (Parallel SSH Tools)

Una herramienta básica para todo administrador de sistemas es Openssh. Con él podemos administrar remotamente cualquier máquina, mediante una conexión segura ssh, como si estuviéramos delante ella. Entre esas tareas tenemos la posibilidad de ejecutar comandos o copiar archivos a  gracias a scp. Para trabajar contra un solo servidor nos vale, pero ¿ y si estamos administrando varios a la vez? Usando scp tendríamos que copiar esos archivos a cada host, uno a uno. Esta limitación tiene una solución, y es la herramienta PSSH (Parallel SSH Tools), con la que podremos trabajar en paralelo con varios equipos.
Para la instalación de esta herramienta utilizaremos otra utilidad, como es python-pip, que nos ayuda en la instalación y manejo de programas basados en Python:
apt-get install python-pip
Una vez hecho, descargamos e instalamos PSSH con el siguiente comando, él solo descargará e instalará todo:
pip install pssh
Captura3
PSSH incluye las siguientes utilidades:

  • pssh –> Ejecuta comandos en varios hosts simultáneamente
  • pscp –> Copia archivos a varios hosts simultáneamente
  • prsync –> Sincroniza archivos a varios hosts simultáneamente
  • pnuke –> Finaliza procesos de varios hosts simultáneamente
  • pslurp –> Copia desde varias máquinas a un hosts

Puedes comprobar las herramientas instaladas en /usr/local/bin:
Captura4
El siguiente paso es crearnos un archivo donde vamos a guardar las ips de los equipos que vamos a administrar, podemos tenerlos divididos en grupos y otro fichero con todos, ya que como veremos, habrá que pasárselo como parámetro a la herramienta. Yo creo uno utilizando nano llamado equipos, con dos ips:
Captura5
Cuando nos conectamos por ssh se nos pide una contraseña, como aquí nos conectaremos a varios equipos a la vez vamos a necesitar crearnos una llave pública para poder acceder a los equipos sin necesidad de poner contraseñas, ya que la complejidad crecería cuantos mas hosts vayamos a administrar. Cada host necesitaría una contraseña.
Cada ordenador tiene una llave privada, a partir de la cual creamos una pública. Esa pública la copiaremos en los hosts a los que vamos a acceder. Cuando nos conectemos por ssh, nuestro ordenador comprobará si en el destino existe una llave pública que coincida con nuestra llave privada, si es así, nos permitirá el acceso. Explicado de manera simple y muy poco técnica, es como si instaláramos una cerradura en un equipo (con su permiso) de la cual nosotros tenemos una llave.
Nos crearemos una llave pública en el ordenador que administrará a los demás de la siguiente forma:
ssh-keygen –b 4096 –t rsa (rsa es el tipo de llave y 4096 el tamaño en bits de la misma)
Nos pedirá una ruta para guardar la llave y una contraseña para la misma (la podemos quedar en blanco)
Captura2
Lo siguiente es copiar la llave a las máquinas a administrar:
ssh-copy-id usuario@ipdelhost
Con esto ya podremos trabajar con los hosts sin necesidad de poner contraseñas, a excepción de la que le hayamos dado a la llave, que nos la pedirá la primera vez.
Hablamos ya de las herramientas que nos ocupan. En la ayuda de todos estos comandos se incluye el valor de todos los posibles parámetros.
La primera es pssh:
Captura6
Con ella podemos ejecutar comandos en varias máquinas al mismo tiempo, y configurar los parámetros que queramos. Con –i le indicamos la salida estándar de muestra como de error, con –h le pasamos el archivo (creado anteriormente) donde tenemos las ips de los equipos a administrar. -l es el usuario con el que accedemos, -o crea un fichero con la salida estándar en la ruta especificada y por último, el comando a ejecutar.
pscp:
Captura7
Con esta utilidad podemos copiar paralelamente cualquier archivo o carpeta a las máquinas administradas. En el ejemplo hemos copiado “archivo” a /home/iso de ambos ordenadores. Otros posibles parámetros de este comando son, por ejemplo, -r para copiar un directorio recursivamente (con sus subdirectorios y archivos),  -e para guardar la salida de error en el directorio que especifiquemos o -v para obtener información del resultado de la copia.
prsync:
Captura8
Captura9
Con prsync sincronizamos una carpeta local con otra en los demás hosts. Si no existe, esta se creará, copiando además (parámetro –r) subdirectorios, archivos, permisos o atributos. Sí cambiamos algo en la carpeta de origen y ejecutamos de nuevo el comando, los nuevos cambios se sincronizarán en el destino. Sólo lo nuevo. Una utilidad muy poderosa ya que nos permite,por ejemplo,  hacer backups en varios equipos.
pnuke:
Captura10
pnuke nos sirve para finalizar o matar procesos que se estén ejecutando en varios equipos simultáneamente. En el ejemplo finalizo el programa yes que había lanzado en cada terminal.
pslurp:
Captura12
Pslurp copia de manera simultánea archivos de los equipos remotos en el nuestro. Cada uno de los archivos es copiado a una carpeta identificativa de cada host y con el nombre que le hayamos asignado. Si no existe, se creará. En este caso, he copiado un archivo llamado archivo1, que existe en los dos equipos (podríamos elegir el archivo de interfaces, por ejemplo, que existe en todas las máquinas) a una carpeta identificada por la ip del host del que hemos copiado, donde se ha creado un subdirectorio llamado copias.
En definitiva, PSSH es una herramienta muy poderosa y que ofrece numerosas ventajas que te pueden ayudar mucho cuando administras más de un equipo paralelamente.