23.2 Schlüssel statt Passwort
Login-Passwörter sind ein notorischer Schwachpunkt in jedem Sicherheitskonzept, weil sie oft zu einfach gewählt sind und durch Wörterbuchattacken gebrochen werden können. Mit OpenSSH können Sie sich auf einen entfernten Server einloggen, ohne ein Passwort eingeben zu müssen – Ihr SSH-Key genügt. Und bequemer ist es auch noch.
23.2.1 Schlüssel erzeugen
Achten Sie darauf, einen kryptografisch starken Schlüssel zu benutzen. Früher wurden per Default DSA-Schlüssel erzeugt, was als nicht mehr ausreichend sicher gilt und von heutigen OpenSSH-Versionen ohne Konfigurationsanpassungen auch nicht mehr als Login-Möglichkeit zugelassen wird. Verwenden Sie stattdessen RSA-Schlüssel mit 4096 Bit Länge:
ssh-keygen -b 4096 -C "Kommentar"
Listing 23.18 Ein Schlüsselpaar erzeugen
Als Kommentar wird häufig die eigene E-Mail-Adresse eingesetzt, um verschiedene Schlüssel später auseinanderhalten zu können. Sie können den Kommentar allerdings auch ganz weglassen, das Programm setzt dann Ihren aktuellen User- und Hostnamen ein. Das Programm fragt Sie nun, wohin es Ihre Schlüssel schreiben soll. Der Default-Pfad ist ~/.ssh/id_rsa für den privaten Schlüssel und ~/.ssh/id_rsa.pub für den öffentlichen Schlüssel.
In der Regel werden Sie keine Veranlassung haben, diese Pfade zu ändern, und können sie einfach bestätigen. Danach werden Sie nach einer Passphrase gefragt. Diese Passphrase schützt den Zugriff auf Ihren Schlüssel und sollte nicht zu einfach gestrickt sein.
[✓] Wenn Sie ein gutes Passwort suchen, aber keinen Zufallsgenerator benutzen möchten, probieren Sie einmal folgende Vorgehensweise aus: Denken Sie sich einen (längeren) Satz aus, den Sie sich gut merken können, etwa: »Montags lerne ich Latein, dienstags Geografie und mittwochs Mathematik, aber am Donnerstag habe ich frei!« Nun nehmen Sie von diesem Satz die Anfangsbuchstaben jedes Worts und die Satzzeichen. Sie erhalten: »MliL,dGumM,aaDhif!«. Das ist noch kein perfektes, aber ein brauchbares Passwort.
Haben Sie die Passphrase eingegeben, wird Ihr Schlüsselpaar generiert und im gewählten Pfad abgelegt.
23.2.2 Passwortloses Login
Nun müssen Sie Ihren öffentlichen Teil des Schlüssels auf dem Server deponieren, auf dem sie sich per SSH anmelden möchten. Dazu verwenden Sie das Kommando ssh-copy-id:
# normalerweise:
ssh-copy-id username@remotehost
# nur falls der Public Key nicht im Standard-Pfad liegt:
ssh-copy-id -i /pfad/zum/public.key username@remotehost
Listing 23.19 SSH-Copy-ID
Ihr öffentlicher Schlüssel wurde nun der Datei /home/username/.ssh/authorized_keys auf dem Server remotehost hinzugefügt. Steht Ihnen ssh-copy-id einmal nicht zur Verfügung oder möchten einmal aus einer Mail oder dem Clipboard heraus einen Schlüssel hinzufügen, können Sie ihn auf dem Server auch von Hand hinzufügen. Jeder Schlüssel wird dabei als Einzeiler hinzugefügt.
Wenn Sie sich nun noch einmal auf dem Server einloggen, werden Sie nicht mehr nach Ihrem Login-Passwort gefragt. Sie werden aber nach der Passphrase für Ihren Schlüssel gefragt. Auch diese Passwortabfrage können Sie noch eliminieren, indem Sie – was ausdrücklich nicht empfohlen wird – mit ssh-keygen ein Schlüsselpaar ohne Passphrase erzeugen. Dazu drücken Sie einfach (¢), wenn ssh-keygen Sie nach der gewünschten Passphrase fragt.
[ ! ] Diese Vorgehensweise ist gefährlich! Wer es schafft, Ihren passwortlosen Schlüssel zu stehlen, kann damit problemlos Ihre Identität vortäuschen. Sie befinden sich nun in einem Habitat, das jedem Sysadmin vertraut ist, nämlich im Spannungsfeld zwischen Sicherheit und Bequemlichkeit. Aber entspannen Sie sich: Es gibt eine Lösung, und zwar in Gestalt des SSH-Agenten, den Sie im nächsten Abschnitt kennenlernen.
Zugriffsbeschränkungen in der »authorized_keys«
Nutzer, die nur wenige genau definierte Kommandos auf einem entfernten System ausführen müssen, benötigen dafür nicht unbedingt einen vollständigen Shell-Zugang. Durch eine Ergänzung in der .ssh/authorized_keys lässt sich der verfügbare Befehlssatz einschränken.
[»] Nehmen wir als Beispiel an, ein Benutzer soll lediglich den Befehl ls ausführen dürfen. In diesem Fall stellen Sie dem Schlüssel des Benutzers einfach command="/bin/ls" voran:
command="/bin/ls" ssh-rsa AAAAB3NzaC1yc2EA[...]5GzqcTdUwqxJ rob@funghi
Listing 23.20 Der Benutzer »rob« darf nur das Kommando »ls« ausführen.
Rob ruft nun auf seinem Client das Kommando ls wie folgt auf:
ssh root@server "ls"
Listing 23.21 Rob benutzt das einzige ihm erlaubte Kommando.
23.2.3 Der SSH-Agent merkt sich Passphrasen
Der SSH-Agent befreit Sie von der lästigen Pflicht, jedes Mal die Passphrase eingeben zu müssen, wenn Sie Ihren Schlüssel benutzen. So starten Sie den Agenten:
# Start:
ssh-agent
# Start mit Passphrase-Timeout (nach Ablauf der angegebenen Zeit "vergisst"
# der Agent Ihre Passphrase:
ssh-agent -t 60m
# Agent stoppen:
ssh-agent -k
Listing 23.22 Den SSH-Agenten starten und stoppen
Viele Distributionen starten den SSH-Agenten automatisch. Ob der Agent bereits läuft, finden Sie entweder durch einen Blick in die Prozessliste heraus oder durch den Befehl aus Listing 23.23:
echo $SSH_AGENT_PID
Listing 23.23 Läuft der SSH-Agent?
Gibt das Kommando eine Prozess-ID zurück, läuft der SSH-Agent. Mit dem Kommando sshadd können Sie eine oder mehrere Schlüsselpassphrasen zum Gedächtnis des Agenten hinzufügen, wieder entfernen und sich die bereits »gelernten« Phrasen anzeigen lassen:
# Der SSH-Agent soll sich die Passphrase Ihres Standard-Schlüssels merken:
ssh-add
# Der Agent soll die Passphrase wieder vergessen:
ssh-add -d
# Fingerprints aller Schlüssel anzeigen lassen, die der Agent zu diesem
# Zeitpunkt kennt:
ssh-add -l
# Der Schlüssel liegt nicht im üblichen Pfad (~/.ssh/):
ssh-add [-d] /pfad/zum/schluessel
Listing 23.24 Funktionen von »ssh-add«