SSH-Key erstellen und passwordless anmelden

Um sich ohne Passwort über SSH mit der Shell zu verbinden, benötigt man ein Schlüsselpaar.

Schlüsselpaar über die Shell erstellen

Dieses erstellen wir einfach direkt auf dem Server, auf dem wir uns verbinden wollen. Also verbinden wir uns erstmal ganz normal über ssh mit dem Server und dem Benutzer den wir verwenden wollen.

In der Linux-Shell führen wir dann folgenden Befehl aus:

ssh-keygen -t rsa -E sha2-512 -b 4096

-t rsa-sha2-512 bewirkt, dass wir den RSA Algorithmus zur Schlüsselerstellung verwenden. Dieser ist mit allen Clients kompatibel. Wer einen modernen Algorithmus verwenden möchte, verwendet ed25519 allerdings ohne -E. -b muss nicht zwangsläufig mit angeben werden. Dieser ist der aktuellste Algorithmus allerdings nicht mit allen Clients kompatibel.
-E sha-512 bewirkt, dass der RSA Schlüssel noch mit SHA2-512 gehasht wird.
-b 4096 gibt die Schlüssellänge an und sollte bei RSA heute immer die maximale Schlüssellänge von 4096 betragen.
-C "" kann ans Ende geschrieben werden, wenn man ein Kommentar hinterlegen möchte. Standardmäßig wird als Schlüsselkommentar einfach die Benutzerkennung, also in meinem Fall pu@zima109 hinterlegt.

Man wird dann gefragt, wo die Schlüssel gespeichert werden sollen und ob der private Schlüssel mit einer Passphrase geschützt werden soll. Ich habe beides mal [Enter] gedrückt. Also Default-Speicherort und keine Passphrase. Aus Sicherheitsgründen sollte in einer Produktivumgebung der private Schlüssel immer eine Passphrase haben.

SSH-Schlüsselpaar wird mit Standardeinstellungen generiert und gespeichert.

Nun haben wir ein Schlüsselpaar, mit dem wir uns anmelden können. Allerdings müssen wir den öffentlichen Schlüssel noch dem Server bekannt machen. Dazu verwenden wir folgenden Befehl:

ssh-copy-id -i ~/.ssh/id_rsa.pub pu@zima109

-i ~/.ssh/id_rsa.pub gibt an, dass dieser öffentliche Schlüssel auf dem Server übertragen werden soll. Er wird dann unter /.ssh/authorized_keys im Profil des Benutzers hinzugefügt.
pu@zima109 gibt den Benutzer@Server an, auf dem der Schlüssel hinterlegt werden soll. Man kann den Schlüssel also auf jeden Server kopieren, mit den man bereits eine SSH-Verbindung aufbauen kann.

Abfolge zum Kopieren des öffentlichen Schlüssel auf die SSH-Server.

Wenn man sich das erste Mal mit dem Server verbindet, wird automatisch der Server Fingerprint geladen. Diesen muss man einmal bestätigen. Er wird anschließend in die /.ssh/known_hosts hinzugefügt. Nun muss man das Passwort des Benutzers eingeben. Jetzt ist der öffentliche Schlüssel für die SSH-Authentifizierung des Benutzers hinterlegt.

Privaten Schlüssel beim SSH-Client hinterlegen

Um den privaten Schlüssel zu hinterlegen benötigen wir den Schlüssel auf dem SSH-Client. Also holen wir uns diesen vom Server. Auf dem Client führen wir nun folgenden Befehl aus:

scp pu@192.168.1.39:~/.ssh/id_rsa id_rsa

scp {source} {target} gibt an, dass wir von dem SSH-Server die Datei „id_rsa“ auf unseren Client mit dem gleichen Namen id_rsa kopieren wollen. Also Benutzer@Server(bzw. die IP):Dateipfad Dateipfad-Ziel-auf-Client.

Nun haben wir die id_rsa kopiert, jetzt möchten wir diese im SSH-Client noch hinterlegen, dazu führt man den Add-Befehl aus:

ssh-add id_rsa

Damit ist der private Schlüssel registriert. Wenn wir nun ssh Benutzer@Server ausführen, wird man angemeldet, ohne ein Passwort einzugeben. Wichtig ist, den privaten Schlüssel sicher abzulegen – beispielweise in einem Passwortsafe – und diesen dann vom Client und vom Server zu löschen. Der private Schlüssel ist nun die Eintrittskarte auf dem Server. Wenn der wegkommt, seid ihr kompromittiert und solltet so schnell wie möglich ein neues Schlüsselpaar anlegen. Allgemein macht es Sinn das Schlüsselpaar alle paar Jahre mal zu wechseln.

SSH-Schlüssel unter Windows einrichten

Unter Windows funktioniert die Anleitung fast identisch, es gibt keinen ssh-copy-id Befehl. Ihr müsst nur in einem Terminal mit administrativen Rechten prüfen, ob die Dienste auch alle angeschaltet sind. Zuallererst die SSH-Dienste:

# Dienststatus prüfen
Get-Service -Name sshd
# Wenn nicht aktiv/gestoppt:
Get-Service -Name sshd | Set-Service -StartupType Automatic
Start-Service sshd

Der SSH-Dienst ist im Normalfall aber bereits am laufen und normales Anmelden per Passwort am SSH-Server ist möglich. Am ehesten wird der OpenSSH Authentication Agent deaktiviert sein, welcher für die passwortlose Anmeldung am SSH-Server benötigt wird.

# Dienststatus prüfen
Get-Service ssh-agent
# Wenn nicht aktiv/gestoppt
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Anschließend können wir dann auch ssh-add und die passwortlose Anmeldung verwenden.

Alte Schlüssel entfernen

Alte öffentliche Schlüssel sollten natürlich auf dem Server entfernt werden. Dazu gehen wir in das Homeverzeichnis des Users auf cd ~/.ssh/ und gehen mit nano authorized_keys in die Datei und löschen die Schlüssel raus, welche nicht mehr verwendet werden sollen. Wie immer mit [STRG]+[O] und [STRG]+[X] speichern und beenden.

Die privaten Schlüssel können wir mit ssh-add -D entfernen. Möchte man vorher schauen, welche Schlüssel vorhanden sind, kann ssh-add -l eingeben werden.

Quelle:
https://www.ssh.com/academy/ssh/keygen
https://www.ssh.com/academy/ssh/copy-id
https://www.ssh.com/academy/ssh/add-command
https://learn.microsoft.com/de-de/windows-server/administration/openssh/openssh_keymanagement
https://www.w3schools.com/bash/bash_scp.php

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert