Auf fünf Servern den Besitzer einer Datei ändern geht schnell. Bei 21 wird es zäh. Puppet oder Chef für einen Einzeiler hochzufahren ist Kanonen auf Spatzen. Ich nutze dafür seit Jahren pssh (Parallel SSH). Perfekt für Bash-Einzeiler, die auf vielen Systemen gleichzeitig laufen müssen.

Installation

pssh braucht Python. Die Installation geht über pip:

pip install parallel-ssh

Voraussetzung ist ein funktionierender SSH-Agent mit geladenem Key:

ssh-agent && ssh-add

Server gruppieren

Ich lege im Home einen Ordner pssh/ an und sortiere die Server in Textdateien nach Gruppen: alle Webserver, alle Mailserver, alle Server an einem Standort. Wenn ich dann ein Kommando auf einer bestimmten Gruppe ausführen will, muss ich nicht mehr nachdenken.

$ cat ~/pssh/srv.aps.ber.txt
srv.aps01.ber
srv.aps02.ber
srv.aps03.ber
[...]
srv.aps21.ber

Kommando absetzen

Das Beispiel: Auf allen 21 Applikationsservern in Berlin den Besitzer eines Scripts ändern und das Ergebnis prüfen.

$ pssh -h srv.aps.ber.txt -l root \
    -o ~/pssh/out-$(date +"%m-%d-%y_%H:%M:%S") \
    "chown aglp02:aglp02 /home/aglp02/del_import_sync.sh; \
     ls -la /home/aglp02/del_import_sync.sh;"
[1] 10:17:35 [SUCCESS] srv.aps17.ber 22
[2] 10:17:35 [SUCCESS] srv.aps03.ber 22
[3] 10:17:35 [SUCCESS] srv.aps01.ber 22
[...]
[21] 10:17:37 [SUCCESS] srv.aps18.ber 22

Die Server werden nicht nacheinander abgearbeitet, sondern gleichzeitig. 21 Server in zwei Sekunden.

Die Parameter

-h — Datei mit der Hostliste.
-l — Benutzername für den SSH-Login.
-o — Verzeichnis für die Ausgabe jedes Servers. Ich lasse mir mit date automatisch einen Unterordner mit Zeitstempel erstellen, damit die Ergebnisse zugeordnet bleiben.
Am Ende steht das Kommando in Anführungszeichen.

Ausgabe kontrollieren

Im Output-Verzeichnis liegt pro Server eine Datei mit der Bash-Ausgabe:

$ cat ~/pssh/out-09-22-14_10:17:35/srv.aps01.ber
-rwxr-xr-x 1 aglp02 aglp02 1801 Jan 21 2009 /home/aglp02/del_import_sync.sh

So lässt sich kontrollieren, ob alles sauber gelaufen ist oder ob auf einzelnen Servern nachgearbeitet werden muss.

Einmal vorbereitet, lässt sich pssh schnell in den Arbeitsalltag integrieren. Für alles, was über Einzeiler hinausgeht, greift man dann zu Ansible oder Puppet. Für den schnellen Handgriff auf 20+ Servern ist pssh genau richtig.

Siehe auch: Z Shell als bessere Shell

Fragen? Einfach melden.