pussh - herramienta para ejecutar comandos SSH en paralelo
(github.com/bearstech)- 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
- Ejemplo:
- La lista de hosts puede proporcionarse desde un archivo o desde la entrada estándar
- Ejemplo:
pussh -f servers uname -aofetch-servers | pussh -f - uname -a
- Ejemplo:
- 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
- Ejemplo: ordenar por uso de disco →
- Es posible guardar la salida de cada host en archivos individuales (
%hrepresenta el nombre del host)- Ejemplo:
pussh -f servers -o %h-hw.txt lshw
- Ejemplo:
- La salida SSH puede canalizarse hacia otros comandos
- Ejemplo:
pussh -f servers -o '|grep feature' command > output
- Ejemplo:
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
- Ejemplo:
-iy-opueden 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
- Ejemplo:
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
- Benchmark de ejemplo (basado en Gigabit LAN):
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
¡El nombre se presta a malas interpretaciones!
No podría estar más de acuerdo 🤣