muscheln
Auch in Zeiten von Puppet und Mcollective braucht man manchmal einfach auf die Schnelle die Möglichkeit, sich per ssh aus einem Server-Cluster bestimmte Informationen holen zu können, oder einfache Befehle ausführen zu können.
Hier bietet sich die oftmals in Vergessenheit geratene Distributed Shell dsh an, die sich für alle gängigen Distributionen einfach per Paketmanagement installieren lässt.
Ein getaggter Puppet Lauf über bestimmte Servertypen, z.B. um nur bestimmte Klassen auszuführen, ist nur eine Anwendung bei der sich die Distributed Shell geradezu aufdrängt.
Das ist eigentlich kein Problem, wenn man die Möglichkeit hat sich die entsprechenden Serverlisten entweder anhand der Namen aus dem DNS, der Icinga Konfiguration, oder auch nur anhand eines bestimmten abgetrennten Subnetzes für die Servertypen, zu generieren.
Nun hatte ich neulich den Fall, dass keiner der o.g. Punkte möglich war, und zusätzlich erschwerend nur ein einziges grosses Netz vorhanden war, in dem sich so ziemlich alle Geräte, inklusive Switches etc. befunden haben.
Man möchte ja, dass der ssh Lauf ohne manuellen Eingriff durchläuft und man nicht jedesmal abbrechen/bestätigen muss, wenn gerade ein Gerät in der Schleife erreicht wird, das eigentlich nicht abgefragt werden soll.
Unter der Voraussetzung, dass alle „normalen“ Server per PublicKey Authentifizierung erreichbar sind (was ja z.B. beim Icinga Monitoring Benutzer i.d.R. der Fall ist) hat sich dabei folgende Befehlszeile bewährt (als einfaches Beispiel z.B. um sich den Distributions Namen ausgeben zu lassen):


dsh -M -o-oBatchMode=yes -o-oStrictHostKeyChecking=no -o-oConnectTimeout=3 \
-f ./serverliste.txt 'lsb_release -c' | \
tee /tmp/debian_version.txt

Gerade die Option BatchMode=yes ist hier alles andere als intuitiv, sorgt aber dafür, dass alle Server in der Liste, die für den Benutzer nicht per Key Authentifizierung erreichbar sind, sofort übersprungen werden.
Wenn man möchte, kann man zusätzlich noch die Option -F angeben, um den Befehl parallel auf der angegebenen Anzahl an Servern ausführen zu lassen.

Stefan Gundel
Stefan Gundel
Senior Systems Engineer

Stefan ist ein Urgestein bei NETWAYS und arbeitet im Managed Services Team. Der internationale Durchbruch gelang Stefan als Fotomodel für den K+K Warenkorb. Nachdem er einige Jahre exklusiv für unseren Kunden StayFriends gearbeitet hat, darf er nun endlich auch wieder in anderen Projekten mitarbeiten.