5 Punkte von xguru 2025-04-22 | 2 Kommentare | Auf WhatsApp teilen
  • 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
  • Hostlisten können aus einer Datei oder von der Standardeingabe bereitgestellt werden
    • Beispiel: pussh -f servers uname -a oder fetch-servers | pussh -f - uname -a
  • 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
  • Die Ausgabe jedes Hosts kann in einer separaten Datei gespeichert werden (%h steht für den Hostnamen)
    • Beispiel: pussh -f servers -o %h-hw.txt lshw
  • Die SSH-Ausgabe kann zur Weiterverarbeitung an andere Befehle gepiped werden
    • Beispiel: pussh -f servers -o '|grep feature' command > output

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
  • -i und -o lassen 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

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  
      

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

 
ahwjdekf 2025-04-24

Der Name ist verdächtig!

 
nemorize 2025-04-25

Ich könnte nicht mehr zustimmen 🤣