AA_PO-24906-Karel_Miragaya-123RF.jpg

© Karel Miragaya, 123RF

Server mit Bordmitteln verwalten

Hausgemacht

Zur Administration mehrerer Rechner braucht man nicht unbedingt eine Lösung wie Puppet oder Cfengine. Oft genügt schon der Einsatz von SSH und seinen Verwandten.

Oft gilt es, mehrere ähnlich konfigurierte Server oder Clients zu betreuen – etwa in einer Firma, einem Internetcafe oder dem EDV-Labor einer Schule. Zwar gibt es Tools wie Puppet oder Cfengine, die dabei die Arbeit erleichtern, aber eine recht steile Lernkurve aufweisen. Für kleinere Installationen greift man da lieber zu einer Lösung mit Bordmitteln.

Als Standardtool für das Verwalten entfernter Rechner dient ssh. Die Secure Shell erlaubt das sichere Login via Netzwerk, sodass man auf dem entfernten Server fällige Änderungen vornehmen und gegebenenfalls die betroffenen Dienste neu starten kann. Das klappt bei einem Rechner zwar fein, wird bei mehreren zu betreuenden Maschinen aber schnell mühsam.

Als erster Knackpunkt erweist sich die Passworteingabe: Muss man sich hintereinander bei mehreren Rechnern einloggen, um etwas zu ändern, sollte das funktionieren, ohne das Passwort mehrfach eintippen zu müssen. Regelmäßige, automatisierte Backups müssen auch laufen, wenn der Admin gerade Urlaub macht oder krank im Bett liegt. Wie kann man das lösen?

SSH-Login ohne Passwort

Ssh erwartet die Passworteingabe normalerweise via Tastatur – es gibt keine Kommandozeilenoption, mit der sich das Passwort angeben ließe. Und das ist auch gut so: Sonst könnte sich ein anderer Benutzer über ps ax alle aktuellen Prozesse inklusive der Kommandozeilenparameter anzeigen lassen und damit das Passwort im Klartext mitlesen.

Für Anmeldungen ohne Angabe eines Passworts bietet Ssh die Möglichkeit, mit Public-Key-Kryptografie ein sicheres Login zu gewährleisten. Dazu müssen Sie nicht nur etwas wissen (Ihren Login-Namen und das zugehörige Passwort), sondern auch etwas besitzen – einen privaten Schlüssel, der zu dem öffentlichen Schlüssel auf dem Server passt.

Listing 1

$ cd ~/.ssh
$ ssh-keygen -N "" -f mysshkey
Generating public/private rsa key pair.
Your identification has been saved in mysshkey.
Your public key has been saved in mysshkey.pub.
The key fingerprint is:
a6:d2:c5:e9:5b:80:10:a0:a6:ef:d5:6a:3d:03:df:d0 user@hostname
The key's randomart image is:
+--[ RSA 2048]----+
|  ...            |
| .   .           |
|..  .            |
|o    . o .       |
|.     ..S        |
| .  .o.=E.       |
|  . o++o. .      |
| . ..o= .o       |
|  ...  o.        |
+-----------------+
$ ssh-copy-id -i mysshkey.pub user@myserver
Password:
Now try logging into the machine, with "ssh 'user@myserver'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Wie Sie so ein Schlüsselpaar erzeugen, zeigt Listing 1. Die Option -N "" gibt an, dass Sie keine "Passphrase" verwenden wollen – eine Tastatureingabe möchten Sie sich ja gerade ersparen. Ssh-keygen erzeugt zwei Dateien, einen privaten Key in der Datei mysshkey (den es geheimzuhalten gilt) und einen öffentlichen Schlüssel im File mysshkey.pub. Letzterer muss auf den oder die Server, auf denen Sie sich mit Ihrem privaten Schlüssel anmelden wollen.

Den Schlüsseltransfer auf den oder die Gegenstellen übernimmt dabei ssh-copy-id (Zeile 20), wobei Sie sich noch ein letztes Mal samt Passwortangabe anmelden müssen. Dabei bleibt Ihnen bei einem erstmaligen Login ebenfalls nicht erspart, dass das System nachfragt, ob Sie dem Fingerprint des entfernten Rechners vertrauen (siehe Kasten "Ausweiskontrolle"). In Zukunft aber klappt das Login dann passwortlos mit folgendem Befehl:

$ ssh -i ~/.ssh/mysshkey user@myserver

Ausweiskontrolle

Sofern Sie Ssh schon einmal benutzt haben, kennen Sie die Abfrage nach der Authentizität der Gegenstelle beim ersten Login (Listing 2). Üblicherweise tippen Sie an dieser Stelle einfach "yes" und können sich dann mit Username und Passwort einloggen. Aber was soll das Ganze?

Die Verbindung zwischen Ihrem Rechner und dem Server erfolgt beim Einsatz von SSH oft über verschiedene (W)LANs, Router und Provider. Deswegen könnte am anderen Ende der Verbindung möglicherweise ein fremder Server stehen, der dann Ihre Login-Daten ausliest und abspeichert. Deswegen prüft Ssh bei der ersten Verbindungsaufnahme den Fingerprint der Gegenstelle. Dabei handelt es sich um einen Hash über den privaten Key des SSH-Servers, der bei dessen Installation erzeugt wurde – quasi der Ausweis des Servers.

Um sicherzugehen, sich auch mit der richtigen Maschine zu verbinden, besorgen Sie sich vorab diesen Fingerprint der Gegenstelle. Sobald Sie ihn bei der ersten Verbindungsaufnahme über 'yes' als korrekt bestätigen, speichert Ssh ihn ab und vergleicht ihn künftig bei jeder Verbindungsaufnahme automatisch. Schlägt der Vergleich fehl, warnt das Programm Sie.

In diesem Fall ist Vorsicht geboten. Möglicherweise wurde einfach nur der Server neu installiert, und der Schlüssel hat sich deshalb geändert. Eventuell lauert am anderen Ende der Leitung aber auch der Server eines Angreifers, der Ihre Zugangsdaten kapern will. Gehen Sie der Sache also auf den Grund.

Listing 2

$ ssh www.example.com
The authenticity of host 'www.example.com (192.0.2.1)' can't be established.
ECDSA key fingerprint is ad:57:60:2b:53:c5:08:07:8b:b3:26:87:1d:2d:5a:b5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'www.example.com' (ECDSA) to the list of known hosts.
Password:
Last login: Sat Sep 12 14:41:29 2015 from otherhost.example.com
Have a lot of fun...

TIPP

Was Sie hier eigentlich vermeiden wollen – eine Passworteingabe – lässt sich alternativ auch dazu nutzen, die Anmeldung stattdessen mithilfe der Schlüsselübergabe sicherer zu gestalten. Dazu geben Sie beim Aufruf von Ssh-keygen die Option -N "" nicht an, woraufhin das Tool Sie nach einer Passphrase fragt, mit der es dann den privaten Schlüssel zusätzlich schützt. Sie benötigen dann zur Anmeldung sowohl Benutzernamen und Schlüssel als auch die Passphrase – ein deutliches Mehr an Sicherheit. Um sich in einem solchen Szenario zumindest die mehrfache Eingabe der Passphrase zu ersparen, können Sie diese mithilfe des Programms ssh-agent zwischenspeichern. Das bringt zwar etwas mehr Komfort, ermöglicht jedoch nicht das vollautomatische Abwickeln von Aufgaben.

Wie gehen Sie nun aber am besten vor, um Aufgaben automatisiert zu erledigen? Die einfachste Möglichkeit bietet eine einfache For-Schleife in der Shell, wie im Beispiel aus Listing 3. Dort installiert das angegebene KOMMANDO auf den Rechnern host1 bis host4 mit dem OpenSuse-Werkzeug Zypper das Paket pssh nach. Dabei vermeidet die Zypper-Option --non-interactive Nachfragen. Ssh selbst bricht nach 10 Sekunden fruchtlose Verbindungsversuche ab (-o ConnectTimeout=10), wenn es eine Gegenstelle nicht erreichen kann, und macht mit dem nächsten Rechner weiter. Ohne diese Vorsichtsmaßnahme würde die For-Schleife "hängenbleiben" und die weiteren Rechner gar nicht bearbeiten.

Listing 3

HOSTS="host1 host2 host3 host4"
KOMMANDO="zypper --non-interactive install pssh"
for i in $HOSTS ; do
  ssh -o ConnectTimeout=10 -i ~/.ssh/mysshkey $i -c "$KOMMANDO"
done

Ein solche Schleife bietet fürs Erste schon eine ganz brauchbare Lösung, aber es gibt auch ausgefeiltere Methoden. Eine davon versteckt sich im Paket pssh, das im Beispiel gerade nachinstalliert wurde.

Parallel SSH

Das Programm Pssh erlaubt es, via SSH Befehle auf mehreren Rechnern parallel auszuführen [1]. Auf den Clients ist dazu nur ein laufender SSH-Server notwendig, Pssh müssen Sie nur auf dem "Steuerungsrechner" installieren. Insofern war das obige Beispiel, das Pssh auf allen Rechnern einrichtete, der Überleitung zuliebe etwas an den Haaren herbeigezogen.

Abbildung 1 zeigt eine parallele SSH-Session via Pssh. Vorab erstellen Sie eine Datei, in der Sie die zu verwendenden Rechner definieren (in unserem Beispiel heißt sie hostfile). Dort steht in jeder Zeile ein Hostname, gegebenenfalls optional mit zugehörigem Benutzernamen und Port in der Form User@Host:Port). Anschließend starten Sie das parallele Login auf den angegebenen Hosts mit folgendem Befehl:

$ pssh -i -x "-i ~/.ssh/mysshkey" -t 10 -h hostfile Kommando

Die Option -i gibt an, dass die Ausgabe im Terminal erfolgen soll, alternativ könnten Sie sie auch in Dateien – je eine für jeden Zielrechner – umleiten. Mittels -t 10 geben Sie einen Timeout von 10 Sekunden vor. Der Parameter -x schließlich legt eine Option fest, die an Ssh weitergereicht wird – hier "-i ~/.ssh/mysshkey", um den SSH-Key zu verwenden.

Abbildung 1: Parallele SSH-Sessions starten Sie mithilfe von Pssh.

Das Login hat in Abbildung 1 auf localhost funktioniert. Für www.linuxuser.de hat der Autor weder den SSH-Hostkey akzeptiert, noch überhaupt einen Account, daher funktioniert das Login nicht. Bei www.google.at bricht der Timeout das Login ab: Dort läuft (erwartungsgemäß) kein öffentlich erreichbarer SSH-Server.

Das Paket pssh bringt neben dem eigentlichen Tool pssh, mit dem Sie auf mehreren Rechnern gleichzeitig via SSH Kommandos ausführen, auch noch pscp und prsync mit, um mit scp oder rsync Dateien auf mehrere Rechner zu kopieren.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • The Answer Girl
    Wer hat sie nicht schon mehr als genug gehört, die gutgemeinte Litanei vom Anlegen eines Backups. In der Firma oder an der Uni mag man dieses leidige Thema mit einiger Berechtigung auf die dortigen Systemadministrator(inn)en abwälzen, doch was ist mit dem Datenbestand zu Hause?
  • Shell-Zugriff per Webbrowser
    Eine Shell im Browser? PHPshell und Shell in a Box machen es möglich und erleichtern damit das Verwalten von Webservern auch ohne SSH-Zugang – beispielsweise aus dem nächsten Internet-Café.
  • Backups mit Rsnapshot
    Mit Rsnapshot legen Sie auf einfache Art sowohl lokale Backups als auch Sicherungen auf entfernten Maschinen an. Das Rotationsprinzip des Tools gibt Ihnen dabei schnellen Zugriff auf ältere Dateiversionen.
  • Datensicherung mit Shell-Kommandos
    Für die Datensicherung können Sie komfortable Backupprogramme verwenden – doch die müssen Sie erst konfigurieren. Wenn es schnell gehen soll, reicht ein einziger Befehl in der Shell.
  • Große Dateien transferieren
    Einige Dateisysteme orientieren sich meist an Dateien kleiner und mittlerer Größe und bekommen bei größeren Brocken schnell Schluckauf. Kleine Umwege versprechen hier Abhilfe.
Kommentare

Infos zur Publikation

LU 12/2016: Neue Desktops

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Drucker Epson XP-332 unter ubuntu 14.04 einrichten
Andrea Wagenblast, 30.11.2016 22:07, 0 Antworten
Hallo, habe vergeblich versucht mein Multifunktionsgerät Epson XP-332 als neuen Drucker unter...
Apricity Gnome unter Win 10 via VirtualBox
André Driesel, 30.11.2016 06:28, 2 Antworten
Halo Leute, ich versuche hier schon seit mehreren Tagen Apricity OS Gnome via VirtualBox zum l...
EYE of Gnome
FRank Schubert, 15.11.2016 20:06, 2 Antworten
Hallo, EOG öffnet Fotos nur in der Größenordnung 4000 × 3000 Pixel. Größere Fotos werden nic...
Kamera mit Notebook koppeln
Karl Spiegel, 12.11.2016 15:02, 2 Antworten
Hi, Fotografen ich werde eine SONY alpha 77ii bekommen, und möchte die LifeView-Möglichkeit nu...
Linux auf externe SSD installieren
Roland Seidl, 28.10.2016 20:44, 1 Antworten
Bin mit einem Mac unterwegs. Mac Mini 2012 i7. Würde gerne Linux parallel betreiben. Aber auf e...