pussh – Tool zur Ausführung paralleler SSH-Befehle
(github.com/bearstech)- Ein CLI-Tool, mit dem sich Befehle über parallele SSH-Sitzungen gleichzeitig auf mehreren Servern ausführen lassen
- Unterstützt einfache Nutzung ebenso wie erweiterte Ein-/Ausgabesteuerung und ist nützlich für die Verwaltung von Serverclustern
Grundfunktionen
- Führt Befehle auf mehreren Hosts aus und gibt die Ausgabe mit dem Hostnamen als Präfix aus
- Beispiel:
pussh -h host1,host2 uname -a
- Beispiel:
- Hostlisten können aus einer Datei oder von der Standardeingabe bereitgestellt werden
- Beispiel:
pussh -f servers uname -aoderfetch-servers | pussh -f - uname -a
- Beispiel:
- Die Ausgabe kann an eine Pipeline übergeben werden, um sie zu sortieren oder zu filtern
- Beispiel: Nach Festplattennutzung sortieren →
pussh -f servers df -h / | grep /dev | sort -rn -k5
- Beispiel: Nach Festplattennutzung sortieren →
- Die Ausgabe jedes Hosts kann in einer separaten Datei gespeichert werden (
%hsteht für den Hostnamen)- Beispiel:
pussh -f servers -o %h-hw.txt lshw
- Beispiel:
- Die SSH-Ausgabe kann zur Weiterverarbeitung an andere Befehle gepiped werden
- Beispiel:
pussh -f servers -o '|grep feature' command > output
- Beispiel:
Eingabesteuerung
- Bei der Befehlsausführung kann Eingabe aus einer Datei oder aus der Ausgabe eines Befehls bereitgestellt werden
- Beispiel:
pussh -f servers -i file command - Beispiel: Hostspezifische Eingabedatei →
pussh -f servers -i %h.data command - Beispiel: Dynamische Eingabe →
pussh -f servers -i 'get-data %h|' command
- Beispiel:
-iund-olassen sich beliebig kombinieren
Bereitstellung und Ausführung
- Befehle oder Skripte können remote übertragen und ausgeführt werden
- Beispiel:
pussh -f servers -u my-deploy.sh args ... - Dabei muss die ausführbare Datei self-contained sein oder mit der Umgebung des Zielservers kompatibel sein
- Beispiel:
Tipps zur Performance-Optimierung
- Die Geschwindigkeit beim Aufbau von SSH-Verbindungen hat großen Einfluss auf die gesamte Ausführungszeit
- Wenn die Verarbeitungsgrenze des SSH-Agenten überschritten wird, kann es zu Authentifizierungsfehlern oder Verbindungsproblemen kommen
- Empfehlung: Mit gesetzter Ausführungsrate verwenden (z. B.
alias pussh='pussh -r 50') - Da Netzwerklatenz großen Einfluss hat, ist es schneller, sich per ssh auf einen entfernten LAN-Rechner einzuloggen und pussh dort auszuführen
- Benchmark-Beispiel (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-Beispiel (Gigabit-LAN):
Entwicklung und Geschichte
- Ein Tool, das seit 2008 intern bei Bearstech verwendet wird
- Ursprünglich nur ein paar Zeilen Shell-Skript, heute läuft es auch in Clustern mit mehr als 500 Servern stabil
- Ist mit einem Cloud-Management-System integriert und erzeugt aus einfachen Hostbeschreibungen ausführbare Hostlisten
Einschränkungen
- stdout und stderr des Remote-Servers werden nicht getrennt, sondern in einem einzigen Stream zusammengeführt ausgegeben
- Der Exit-Status (
exit status) des auf dem Remote-Server ausgeführten Befehls kann nicht abgerufen werden
2 Kommentare
Der Name ist verdächtig!
Ich könnte nicht mehr zustimmen 🤣