SSH: Authentifizierung mit Schlüsselpaaren (Zugriff ohne Passwort)

Um per SSH Zugriff auf entfernte Hosts zu erhalten, wird in der Regel ein Benutzerkonto auf dem Host benötigt, nebst zugehörigem Passwort. Stellt man eine Verbindung per SSH her, wird dann jedes Mal das Passwort abgefragt. Im Prinzip kein großes Ding, im lokalen Netzwerk muss man sicher keine Passwörter mit 20 Stellen, Groß-/Kleinschreibung, Zahlen und Sonderzeichen verwenden, wenn die Netzwerkteilnehmer sowieso nicht über das Internet erreichbar sind. Aber es geht auch einfacher und das nennt sich Authentifizierung mit Schlüsselpaaren.

SSH-Authentifizierung mit Schlüsselpaaren: Schlüsselpaare generieren

SSH: Schlüsselpaare generieren

Hierzu werden zwei Zertifikate erzeugt, die als Public Key und Private Key bezeichnet werden. Diese liegen in Dateiform vor und werden an entsprechender Stelle auf dem Host und auf dem Client abgespeichert. Dabei bekommt der Host den Public Key und der Client den Private Key. Verbindet sich nun ein Client mit dem passenden Private Key zu einem Host, wird der Zugriff gewährt, ohne dass ein Passwort eingegeben werden muss.

Zur Steigerung der Sicherheit ist es dennoch möglich, ein Passwort trotz Authentifizierung mit Schlüsselpaaren zu verlangen. Es ist immerhin denkbar, dass jemand das Passwort errät oder der Private Key in die Hände fällt. Insbesondere, wenn der SSH-Zugang von außen erfolgen kann/soll/darf, macht die Erhöhung der Sicherheit sinn.

Großer Vorteil der Authentifizierung mit Schlüsselpaaren statt mit Passwort: man kann damit wunderbar Scripte erstellen, die Befehle auf anderen Hosts ausführen, ohne dass man das Passwort im Klartext im Script hinterlegen muss.

Schlüssel erzeugen

In diesem Beispiel sollen die Schlüsselpaare zwischen einem Mac und einem Raspberry Pi ausgetauscht werden, wobei der Mac als Client und der Raspberry Pi der Host fungiert. Es spielt dabei keine Rolle, auf welchem Gerät die Schlüsselpaare erzeugt werden. Ich erzeuge sie am Mac.

Dazu öffnen wir das Terminal und setzen folgenden Befehl ab:

$ ssh-keygen -b 4096

Es wird ein RSA-Key mit einer Länge von 4096 Bit erzeugt. Während des Vorgangs kann man noch den gewünschten Dateinamen und Speicherort anpassen (der Standard kann aber auch so übernommen werden) und man kann ein zusätzliches Passwort vergeben. Am Ende erhält man zwei Dateien:

/Users/sebastian/.ssh/id_rsa -> Private Key
/Users/sebastian/.ssh/id_rsa.pub -> Public Key

Übertragen der Schlüssel zum Server

Während der Private Key auf dem Client bleibt, muss der Public Key zum Server transferiert werden. Dort wird er in der Regel unter ~/.ssh/authorized_keys gespeichert (~ ist dabei das Kürzel für das Home-Verzeichnis des Nutzers).

Ich habe die Datei id_rsa.pub einfach per Dateifreigabe auf den Raspberry Pi kopiert, sodass er sich dort jetzt im Verzeichnis /home/pi befindet.

Dann loggen wir uns per SSH auf dem Pi ein und bringen den Schlüssel an die richtige Stelle. Dazu erstellen wir zunächst das SSH-Konfigurationsverzeichnis und platzieren dort den Schlüssel:

$ mkdir ~/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

Anschließend müssen noch die Dateirechte korrekt gesetzt werden:

$ chmod 600 ~/.ssh/authorized_keys

Die zuvor auf den Raspberry Pi übertragene Datei id_rsa.pub wird nun nicht mehr benötigt und kann gelöscht werden:

$ rm ~/id_rsa.pub

Um zu überprüfen ob alles funktioniert hat kann man nun die Verbindung trennen und neu aufbauen. Wenn man beim Generieren der Schlüssel kein Passwort angegeben hat, wird nun auch nicht danach gefragt.

Sebastian

1 Comment

  1. Antworten Lockslay

    Hallo Sebastian,

    vielen Dank für die Anleitung, die hat mir echt geholfen. Ich habe aber eine Frage, ich habe beim Erstellen des Keys ein Passwort angegeben. Trotzdem werde ich beim Anmelden mit ssh name@IP nicht nach einem Passwort gefragt sondern direkt verbunden.
    Hast du eine Idee was ich da falsch mache?

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

WordPress Cookie Hinweis von Real Cookie Banner