Im Admin-Alltag kommt es nicht selten vor, das dasselbe Kommando auf mehreren Rechnern auszuführen ist. Eigentlich ist das die Domäne von Automatisierungstools wie Chef oder Puppet, aber es klappt auch eine Nummer kleiner.
Eine weniger anspruchsvolle Lösung für das parallele Abarbeiten gleicher Kommandos auf verschiednenen Rechnern findet sich im Paket pssh . Es enthält Werkzeuge wie parallel-slurp für den parallelen Download eines Files von verschiedenen Remote-Computern auf den lokalen Rechner. Dasselbe in der Gegenrichtung erledigt parallel-scp . Dagegen führt parallel-ssh beliebige Kommandos auf einer Reihe von Rechnern aus und parallel-nuke killt auf mehreren entfernten Computern einen bestimmten Prozess.
Allen diesen Tools gemeinsam ist, dass sie die Liste der parallel zu verwendenden Rechner hinter dem Schalter -h als einfaches Textfile im Format
user@rechner:[port]
erwarten. Damit ergibt sich ein Aufruf wie
jcb@hercules:~$ parallel-ssh -i -h ./phosts.txt uptime [1] 16:47:18 [SUCCESS] jbrendel@reed 33 16:47:18 up 19 days, 5:21, 3 users, load average: 0.19, 0.21, 0.22 [2] 16:47:18 [SUCCESS] root@esxi 33 16:47:18 up 42 days, 5:21, 5 users, load average: 0.39, 0.24, 0.23
Die Option -i (inline) sorgt hier dafür, dass STDOUT des entfernten Rechners in die Ausgabe übernommen wird, andernfalls würde man die Uptime-Werte nicht sehen können.
Im Beispiel waren die Public Keys auf den Remotesystemen in .ssh/authorized_keys hinterlegt, sodass ein SSH-Login ohne Passwort möglich war. Alternativ kann man mit dem Schalter -A auch eine sichere Passworteingabe ermöglichen.