Pssh: ejecute comandos en varios servidores Linux remotos utilizando un solo terminal


Sin duda, OpenSSH es una de las herramientas más utilizadas y poderosas disponibles para Linux, que le permite conectarse de forma segura a sistemas Linux remotos a través de un shell y le permite transferir archivos de forma segura hacia y desde sistemas remotos.

Pero las mayores desventajas de OpenSSH es que no puede ejecutar el mismo comando en varios hosts a la vez y OpenSSH no está desarrollado para realizar tales tareas. Aquí es donde la herramienta Parallel SSH o PSSH es útil, es una aplicación basada en Python, que le permite ejecutar comandos en múltiples hosts en paralelo al mismo tiempo.

No se pierda: ejecute comandos en varios servidores Linux con la herramienta DSH

La herramienta PSSH incluye versiones paralelas de OpenSSH y herramientas relacionadas como:

  1. pssh : es un programa para ejecutar ssh en paralelo en varios hosts remotos.
  2. pscp: es un programa para copiar archivos en paralelo a varios hosts.
    1. Pscp: copiar/transferir archivos dos o más servidores Linux remotos

    Estas herramientas son buenas para los administradores del sistema que se encuentran trabajando con grandes colecciones de nodos en una red.

    Instale PSSH o SSH paralelo en Linux

    En esta guía, veremos los pasos para instalar la última versión del programa PSSH (es decir, la versión 2.3.1) en distribuciones basadas en Fedora como CentOS/RedHat y derivados de Debian como Ubuntu/Mint usando el comando pip.

    El comando pip es un pequeño programa (reemplazo del script easy_install) para instalar y administrar el índice de paquetes de software de Python.

    En las distribuciones CentOS/RHEL, primero debe instalar el paquete pip (es decir, python-pip) en su sistema para poder instalar el programa PSSH.

    # yum install python-pip
    

    En Fedora 21+, debe ejecutar el comando dnf en lugar de yum (dnf reemplazó a yum).

    # dnf install python-pip
    

    Una vez que haya instalado la herramienta pip, puede instalar el paquete pssh con la ayuda del comando pip como se muestra.

    # pip install pssh  
    
    /usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
      InsecurePlatformWarning
    You are using pip version 7.1.0, however version 7.1.2 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    Collecting pssh
    /usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
      InsecurePlatformWarning
      Downloading pssh-2.3.1.tar.gz
    Installing collected packages: pssh
      Running setup.py install for pssh
    Successfully installed pssh-2.3.1
    

    En las distribuciones basadas en Debian, se tarda un minuto en instalar pssh usando el comando pip.

    $ sudo apt-get install python-pip
    $ sudo pip install pssh
    
    Downloading/unpacking pssh
      Downloading pssh-2.3.1.tar.gz
      Running setup.py (path:/tmp/pip_build_root/pssh/setup.py) egg_info for package pssh
        
    Installing collected packages: pssh
      Running setup.py install for pssh
        changing mode of build/scripts-2.7/pssh from 644 to 755
        changing mode of build/scripts-2.7/pnuke from 644 to 755
        changing mode of build/scripts-2.7/prsync from 644 to 755
        changing mode of build/scripts-2.7/pslurp from 644 to 755
        changing mode of build/scripts-2.7/pscp from 644 to 755
        changing mode of build/scripts-2.7/pssh-askpass from 644 to 755
        
        changing mode of /usr/local/bin/pscp to 755
        changing mode of /usr/local/bin/pssh-askpass to 755
        changing mode of /usr/local/bin/pssh to 755
        changing mode of /usr/local/bin/prsync to 755
        changing mode of /usr/local/bin/pnuke to 755
        changing mode of /usr/local/bin/pslurp to 755
    Successfully installed pssh
    Cleaning up...
    

    Como puede ver en el resultado anterior, la última versión de pssh ya está instalada en el sistema.

    ¿Cómo uso pssh?

    Al usar pssh, debe crear un archivo de host con la cantidad de hosts junto con la dirección IP y el número de puerto que necesita para conectarse a sistemas remotos usando pssh.

    Las líneas en el archivo de host tienen el siguiente formato y también pueden incluir líneas en blanco y comentarios.

    192.168.0.10:22
    192.168.0.11:22
    

    Puede ejecutar cualquier comando en diferentes o múltiples hosts Linux en una red ejecutando un comando pssh. Hay muchas opciones para usar con pssh como se describe a continuación:

    Veremos algunas formas de ejecutar comandos en varios hosts usando pssh con diferentes opciones.

    1. Para leer el archivo de hosts, incluya la opción -h host_file-name o –hosts host_file_name.
    2. Para incluir un nombre de usuario predeterminado en todos los hosts que no definen un usuario específico, use la opción -l nombre de usuario o –usuario nombre de usuario.
    3. También puede mostrar la salida estándar y el error estándar a medida que se completa cada host. Utilizando la opción -i o –inline.
    4. Es posible que desee hacer que las conexiones caduquen después de la cantidad de segundos indicada al incluir la opción -t número_de_segundos.
    5. Para guardar la salida estándar en un directorio determinado, puede usar la opción -o/directorio/ruta.
    6. Para solicitar una contraseña y enviarla a ssh, use la opción -A.

    Veamos algunos ejemplos y el uso de comandos pssh:

    1. Para ejecutar echo "Hello TecMint" en el terminal de los múltiples hosts de Linux por parte del usuario root y solicitar la contraseña del usuario root, ejecute este comando a continuación.

    Importante: recuerde que todos los hosts deben estar incluidos en el archivo de host.

    # pssh -h pssh-hosts -l root -A echo "Hello TecMint"
    
    Warning: do not enter your password if anyone else has superuser
    privileges or access to your account.
    Password: 
    [1] 15:54:55 [SUCCESS] 192.168.0.10:22
    [2] 15:54:56 [SUCCESS] 192.168.0.11:22
    

    Nota: En el comando anterior, "pssh-hosts" es un archivo con una lista de la dirección IP de los servidores Linux remotos y el número de puerto SSH que desea ejecutar.

    2. Para averiguar el uso de espacio en disco en varios servidores Linux en su red, puede ejecutar un solo comando de la siguiente manera.

    # pssh -h pssh-hosts -l root -A -i "df -hT"
    
    Warning: do not enter your password if anyone else has superuser
    privileges or access to your account.
    Password: 
    [1] 16:04:18 [SUCCESS] 192.168.0.10:22
    Filesystem     Type   Size  Used Avail Use% Mounted on
    /dev/sda3      ext4    38G  4.3G   32G  12% /
    tmpfs          tmpfs  499M     0  499M   0% /dev/shm
    /dev/sda1      ext4   190M   25M  156M  14% /boot
    
    [2] 16:04:18 [SUCCESS] 192.168.0.11:22
    Filesystem              Type      Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root xfs        30G  9.8G   20G  34% /
    devtmpfs                devtmpfs  488M     0  488M   0% /dev
    tmpfs                   tmpfs     497M  148K  497M   1% /dev/shm
    tmpfs                   tmpfs     497M  7.0M  490M   2% /run
    tmpfs                   tmpfs     497M     0  497M   0% /sys/fs/cgroup
    /dev/sda1               xfs       497M  166M  332M  34% /boot
    

    3. Si desea conocer el tiempo de actividad de varios servidores Linux a la vez, puede ejecutar el siguiente comando.

    # pssh -h pssh-hosts -l root -A -i "uptime"
    Warning: do not enter your password if anyone else has superuser
    privileges or access to your account.
    Password: 
    [1] 16:09:03 [SUCCESS] 192.168.0.10:22
     16:09:01 up  1:00,  2 users,  load average: 0.07, 0.02, 0.00
    
    [2] 16:09:03 [SUCCESS] 192.168.0.11:22
     06:39:03 up  1:00,  2 users,  load average: 0.00, 0.06, 0.09
    

    Puede ver la página de entrada manual del comando pssh para obtener muchas otras opciones para descubrir más formas de usar pssh.

    # pssh --help
    

    Resumen

    Parallel SSH o PSSH es una buena herramienta para ejecutar comandos en un entorno donde un administrador del sistema tiene que trabajar con muchos servidores en una red. Facilitará la ejecución de comandos de forma remota en diferentes hosts de una red.

    Espero que esta guía le resulte útil y, en caso de que tenga información adicional sobre pssh o errores durante la instalación o el uso, no dude en publicar un comentario.