Dirk und ich helfen unter anderem ja bei der Betreuung einiger Server fuer den ubuntu Deutschland e.V. Im Detail handelt es sich hierbei um neun Server die in Koeln bei NetCologne in einem Schrank verbaut sind. Ich erwaehne NetCologne deshalb, da man dort so nett war und uns Platz im RZ gesponsert hat.
Der von uns gewaehlte Aufbau stellt sich wie folgt dar:
Wie hier (un)schwer zu erkennen ist, haben wir zwei Server, die von aussen erreichbar sind. Der Rest der Maschinen sitzt in einem privaten Netz und ist von aussen nicht direkt ansprechbar. Nach dem Einbau der Server mussten natuerlich einige Konfigurationen und Einrichtungen durchgefuehrt werden, die auf allen Servern identisch waren. Beispielsweise waere das die Anlage der berechtigten Benutzer, die Aktualisierung der Systeme oder auch die Abfrage von Hardwareinformationen fuer die eigene Dokumentation. Die Frage war nun, wie koennen anstehende Taetigkeiten unkompliziert ausgefuehrt werden? Fuer die beiden direkt von aussen erreichbaren Server bietet sich ad hoc cssh (Central Secure Shell) an. Hiermit ist es moeglich Befehle auf mehreren Systemen zeitgleich abzusetzen. Dirk hatte in seinem Blog hierzu schon mal das ein oder andere geschrieben.
Wie aber frage ich beispielsweise die Plattenkapazitaet aller Server an, die <strong>nicht</strong> direkt von aussen erreichbar sind?
Hier haben wir mal wieder eine von vielen moeglichen Loesungen. Zu Anfang erstellen wir auf einem der „vorderen“ Server erst einmal eine Liste aller Server, die wir spaeter ansprechen moechten. Liste bedeutet hier, dass in jeder Zeile eine Serveradresse zu finden ist. Anschliessend koennen wir diese Liste nutzen um, mit Hilfe der immer wieder gerne uebersehenen Command-Funktion von ssh, unsere Befehle auf den Maschinen auszufuehren.
ramon@srv-cgn-01:~$ for i in $(< server); do ssh $i df -h; done
Schon wird auf allen in der Liste befindlichen Servern der Befehl df -h
ausgefuehrt. Zu beachten ist, dass beispielsweise der Befehl sudo visudo im aktuellen Beispiel nicht funktionieren wuerde. Statt dessen wird man eine Meldung wie „sudo: no tty present and no askpass program specified“ erhalten. Der Grund fuer die Meldung ist, dass sudo eine Konsole fuer die Passwortabfrage benoetigt, die via ssh aber nicht „durchgereicht“ wird. Abhilfe schafft hier die Option -t. Sprich, ein ramon@srv-cgn-01:~$ for i in $(cat server); do ssh -t $i sudo visudo; done
bietet einem auch die Passwortabfrage fuer das sudo der entfernten Maschine an.
Das Szenario kann natuerlich an einigen Stellen vereinfacht werden. Aber dazu vielleicht spaeter noch mal mehr.
Was mich interessieren wuerde ist, wie eure Loesung aussieht?