5 puntos por xguru 2025-04-22 | 2 comentarios | Compartir por WhatsApp
  • Herramienta CLI que permite ejecutar comandos simultáneamente en varios servidores mediante sesiones SSH en paralelo
  • Soporta desde un uso simple hasta control avanzado de entrada/salida, y es útil para administrar clústeres de servidores

Funciones básicas

  • Ejecuta comandos en múltiples hosts y muestra la salida con el nombre del host como prefijo
    • Ejemplo: pussh -h host1,host2 uname -a
  • La lista de hosts puede proporcionarse desde un archivo o desde la entrada estándar
    • Ejemplo: pussh -f servers uname -a o fetch-servers | pussh -f - uname -a
  • La salida puede conectarse a un pipeline para ordenarla o filtrarla
    • Ejemplo: ordenar por uso de disco → pussh -f servers df -h / | grep /dev | sort -rn -k5
  • Es posible guardar la salida de cada host en archivos individuales (%h representa el nombre del host)
    • Ejemplo: pussh -f servers -o %h-hw.txt lshw
  • La salida SSH puede canalizarse hacia otros comandos
    • Ejemplo: pussh -f servers -o '|grep feature' command > output

Funciones de control de entrada

  • Al ejecutar un comando, la entrada puede suministrarse desde un archivo o desde la salida de otro comando
    • Ejemplo: pussh -f servers -i file command
    • Ejemplo: archivo de entrada por host → pussh -f servers -i %h.data command
    • Ejemplo: entrada dinámica → pussh -f servers -i 'get-data %h|' command
  • -i y -o pueden combinarse libremente

Funciones de despliegue y ejecución

  • Es posible transferir y ejecutar comandos o scripts de forma remota
    • Ejemplo: pussh -f servers -u my-deploy.sh args ...
    • Sin embargo, el ejecutable debe ser self-contained o compatible con el entorno del servidor de destino

Consejos de optimización de rendimiento

  • La velocidad al establecer conexiones SSH tiene un gran impacto en el tiempo total de ejecución
  • Si se supera el límite de velocidad de procesamiento del SSH agent, pueden ocurrir fallos de autenticación o errores de conexión
  • Recomendación: usar una tasa de ejecución (rate) configurada (ejemplo: alias pussh='pussh -r 50')
  • Como la latencia de red influye mucho, suele ser más rápido iniciar sesión por ssh en una máquina dentro de la LAN remota y ejecutar pussh desde ahí
    • Benchmark de ejemplo (basado en Gigabit LAN):
      $ time pussh -f servers -r 100 date  
      Total: 201 host(s), 4 second(s)  
      
      real    0m4.069s  
      user    0m7.132s  
      sys     0m3.140s  
      

Desarrollo e historia

  • Herramienta usada internamente en Bearstech desde 2008
  • Al principio era un script de shell de unas pocas líneas, y hoy funciona de forma estable incluso en clústeres de más de 500 servidores
  • Se integra con sistemas de administración en la nube para generar listas de hosts ejecutables a partir de descripciones simples de hosts

Limitaciones

  • En el servidor remoto, stdout y stderr no se distinguen y se combinan en un solo stream de salida
  • No es posible obtener el estado de salida (exit status) del comando ejecutado en el servidor remoto

2 comentarios

 
ahwjdekf 2025-04-24

¡El nombre se presta a malas interpretaciones!

 
nemorize 2025-04-25

No podría estar más de acuerdo 🤣