SSH-Authentifizierung mit öffentlichem Schlüssel unter Linux konfigurieren

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie die SSH-Authentifizierung mittels öffentlichem Schlüssel (Public Key Authentication) konfigurieren und nutzen, um eine sichere Verbindung zu einem entfernten Linux-Server aufzubauen. Diese Methode erhöht sowohl die Sicherheit als auch den Komfort, da die herkömmliche passwortbasierte Anmeldung durch ein kryptografisches Schlüsselpaar ersetzt wird. Sie erstellen einen privaten Schlüssel, der geheim auf Ihrem lokalen Rechner verbleibt, und einen öffentlichen Schlüssel, der auf dem Server hinterlegt wird, um Ihren Zugriff zu autorisieren.

Der Prozess umfasst drei Hauptschritte. Zuerst verwenden Sie den Befehl ssh-keygen, um ein neues RSA-Schlüsselpaar für einen Demonstrationsbenutzer zu generieren, wobei Sie durch ein Passwort (Passphrase) eine zusätzliche Sicherheitsebene hinzufügen. Als Nächstes kopieren Sie den öffentlichen Schlüssel mit dem Werkzeug ssh-copy-id sicher in die Datei der autorisierten Schlüssel auf dem Zielserver. Abschließend testen Sie die Konfiguration, indem Sie sich über SSH am Server anmelden. Dabei wird nun Ihr Schlüsselpaar zur Authentifizierung anstelle eines Passworts verwendet.

Demonstrationsbenutzer erstellen und RSA-Schlüsselpaar generieren

In diesem Schritt erstellen Sie zunächst ein dediziertes Benutzerkonto zur Demonstration der SSH-Authentifizierung und generieren anschließend ein kryptografisches RSA-Schlüsselpaar. Dieser Ansatz stellt sicher, dass wir eine saubere Umgebung für die Demonstration haben, ohne bestehende Benutzerkonfigurationen zu beeinflussen.

Den Demonstrationsbenutzer erstellen

Zuerst erstellen wir einen neuen Benutzer namens sshuser, der für unsere SSH-Demonstration verwendet wird:

sudo adduser sshuser

Sie werden aufgefordert, ein Passwort festzulegen und Benutzerinformationen anzugeben. Verwenden Sie für dieses Lab password123 als Passwort. Die optionalen Felder (Vollständiger Name, Zimmernummer usw.) können Sie durch Drücken der Eingabetaste überspringen.

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

Das RSA-Schlüsselpaar generieren

Wechseln Sie nun zum Konto sshuser, um das Schlüsselpaar zu generieren. Dies stellt sicher, dass die Schlüssel im korrekten Heimatverzeichnis des Benutzers erstellt werden:

sudo su - sshuser

Sie agieren nun als sshuser. Generieren Sie ein RSA-Schlüsselpaar mit dem Befehl ssh-keygen. Das Flag -t gibt den Typ des zu erstellenden Schlüssels an, in diesem Fall rsa.

ssh-keygen -t rsa

Nach Ausführung des Befehls werden Sie nach einem Speicherort für die Schlüssel gefragt. Der Standardpfad ist ~/.ssh/id_rsa, der sich in einem versteckten Verzeichnis namens .ssh im Heimatverzeichnis des Benutzers befindet. Drücken Sie die Eingabetaste, um diesen Standardpfad zu akzeptieren.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sshuser/.ssh/id_rsa):

Als Nächstes werden Sie aufgefordert, eine Passphrase einzugeben. Eine Passphrase fügt Ihrem privaten Schlüssel eine zusätzliche Sicherheitsebene hinzu. Verwenden Sie für dieses Lab sshkey-password als Passphrase. Sie müssen diese zweimal eingeben.

Hinweis: Wenn Sie die Passphrase eingeben, werden keine Zeichen auf dem Bildschirm angezeigt. Dies ist ein standardmäßiges Sicherheitsmerkmal.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sshuser/.ssh/id_rsa
Your public key has been saved in /home/sshuser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:<FINGERPRINT_STRING> sshuser@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|      .. . .o..  |
|     .  . . o..  |
|      .  . = . . |
|       .  B o .  |
|        S= * .   |
|        o*B o .  |
|       .oO=B . . |
|      .o+*+oE. . |
|      .o*o=o.o.  |
+----[SHA256]-----+

Nachdem die Schlüssel generiert wurden, können Sie überprüfen, ob die Dateien korrekt erstellt wurden. Verwenden Sie den Befehl ls -l, um den Inhalt des Verzeichnisses ~/.ssh aufzulisten:

ls -l ~/.ssh

Sie sollten eine Ausgabe ähnlich der folgenden sehen, die Ihre neuen Schlüsseldateien anzeigt:

total 8
-rw------- 1 sshuser sshuser 2610 Jun 30 10:30 id_rsa
-rw-r--r-- 1 sshuser sshuser  575 Jun 30 10:30 id_rsa.pub

Beachten Sie die Dateiberechtigungen. Der private Schlüssel id_rsa hat Lese- und Schreibrechte nur für den Eigentümer, während der öffentliche Schlüssel id_rsa.pub auch von anderen gelesen werden kann. Es ist von entscheidender Bedeutung, Ihren privaten Schlüssel zu schützen und ihn niemals weiterzugeben.

Den öffentlichen Schlüssel mit ssh-copy-id auf den Server kopieren

In diesem Schritt kopieren Sie den im vorherigen Schritt generierten öffentlichen Schlüssel auf den SSH-Server. Dieser Vorgang autorisiert den Schlüssel und ermöglicht es Ihnen, sich mit dem entsprechenden privaten Schlüssel anstelle eines Passworts anzumelden. Das Hilfsprogramm ssh-copy-id ist ein Skript, das diesen Prozess vereinfacht, indem es Ihren Schlüssel an der richtigen Stelle auf dem Server installiert.

Für dieses Lab simulieren wir eine Client-Server-Interaktion auf einer einzigen Maschine. Das Konto sshuser fungiert sowohl als Client als auch als Zielkonto für die SSH-Verbindung.

Stellen Sie sicher, dass Sie immer noch als Benutzer sshuser angemeldet sind. Falls Sie zum Benutzer labex zurückgekehrt sind, wechseln Sie wieder zurück:

sudo su - sshuser

Jetzt sind Sie bereit, den öffentlichen Schlüssel zu kopieren. Der Befehl ssh-copy-id erwartet den entfernten Benutzer und den Host als Argument. Wir verwenden sshuser@localhost, um den Benutzer sshuser auf dem lokalen Rechner (der als Server fungiert) anzugeben.

Führen Sie den Befehl aus:

ssh-copy-id sshuser@localhost

Da dies die erste Verbindung zu localhost über SSH ist, werden Sie aufgefordert, die Authentizität des Hosts zu bestätigen. Geben Sie yes ein, um fortzufahren:

The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:<FINGERPRINT_STRING>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Das Programm sucht dann nach Ihrem Schlüssel id_rsa.pub und fordert Sie zur Eingabe des Passworts für das Konto sshuser auf. Geben Sie das Passwort password123 ein, das Sie bei der Erstellung des Benutzers festgelegt haben.

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
sshuser@localhost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'sshuser@localhost'"
and check to make sure that only the key(s) you wanted were added.

Die Ausgabe bestätigt, dass ein Schlüssel erfolgreich hinzugefügt wurde. Der Befehl ssh-copy-id erstellt automatisch das Verzeichnis ~/.ssh auf dem Server, falls es noch nicht existiert, und fügt Ihren öffentlichen Schlüssel der Datei ~/.ssh/authorized_keys hinzu.

Um dies zu bestätigen, können Sie den Inhalt der Datei authorized_keys anzeigen. Sie sollte exakt denselben Schlüssel enthalten wie Ihre Datei id_rsa.pub.

cat ~/.ssh/authorized_keys

Die Ausgabe ist eine lange Zeichenfolge, die Ihren öffentlichen Schlüssel darstellt.

ssh-rsa AAAA...[lange Schlüsselzeichenfolge]...== sshuser@ubuntu

SSH-Anmeldung mit Authentifizierung über öffentlichen Schlüssel testen

In diesem letzten Schritt testen Sie die neue Konfiguration, um sicherzustellen, dass die Authentifizierung über den öffentlichen Schlüssel korrekt funktioniert. Sie versuchen, sich mit dem von Ihnen erstellten Schlüsselpaar am SSH-Server anzumelden. Anstatt nach Ihrem Benutzerpasswort gefragt zu werden, sollten Sie nun zur Eingabe der Passphrase für Ihren privaten Schlüssel aufgefordert werden.

Stellen Sie sicher, dass Sie immer noch als Benutzer sshuser agieren:

whoami

Die Ausgabe sollte sshuser lauten. Wenn nicht, wechseln Sie zurück zum Konto sshuser:

sudo su - sshuser

Lassen Sie uns nun eine SSH-Verbindung zu localhost initiieren. Da Sie sich bereits einmal während des Kopiervorgangs des Schlüssels verbunden haben, sollte der Host-Schlüssel bereits akzeptiert sein.

Führen Sie den folgenden Befehl aus, um die Verbindung herzustellen:

ssh sshuser@localhost

Sie werden aufgefordert, die Passphrase für Ihren privaten Schlüssel einzugeben. Dies ist die Passphrase, die Sie in Schritt 1 erstellt haben (sshkey-password).

Enter passphrase for key '/home/sshuser/.ssh/id_rsa':

Geben Sie Ihre Passphrase sshkey-password ein und drücken Sie die Eingabetaste. Wenn Sie sie korrekt eingegeben haben, werden Sie am Server angemeldet und sehen eine Willkommensnachricht.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Mon Jun 30 10:45:23 2024 from ::1
sshuser@ubuntu:~$

Herzlichen Glückwunsch! Sie haben sich erfolgreich mit der Authentifizierung über einen öffentlichen Schlüssel angemeldet. Sie befinden sich nun in einer neuen SSH-Sitzung. Beachten Sie, dass Sie nicht nach dem Passwort des Benutzerkontos (password123) gefragt wurden, sondern nur nach der Passphrase des Schlüssels.

Um zu überprüfen, ob Sie sich in einer neuen SSH-Sitzung befinden, können Sie die Umgebung prüfen:

echo $SSH_CONNECTION

Dies sollte Verbindungsdetails anzeigen und bestätigen, dass Sie sich in einer SSH-Sitzung befinden.

Um die SSH-Sitzung zu beenden und zu Ihrem ursprünglichen Terminal zurückzukehren, geben Sie einfach exit ein und drücken Sie die Eingabetaste.

exit

Sie sehen eine Meldung, die bestätigt, dass die Verbindung geschlossen wurde.

logout
Connection to localhost closed.

Schließlich können Sie das Konto sshuser verlassen, um zum Benutzer labex zurückzukehren:

exit

Sie haben nun erfolgreich die SSH-Authentifizierung mit öffentlichem Schlüssel unter Verwendung eines dedizierten Demonstrationsbenutzers konfiguriert und getestet.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die SSH-Authentifizierung mit öffentlichem Schlüssel konfigurieren und verwenden, um eine sichere, passwortlose Verbindung zu einem entfernten Linux-Server herzustellen. Sie begannen mit der Erstellung eines dedizierten Demonstrationsbenutzers (sshuser), um eine saubere Umgebung für die schlüsselbasierte Authentifizierung zu gewährleisten. Anschließend generierten Sie mit dem Befehl ssh-keygen ein neues RSA-Schlüsselpaar. Dieser Prozess erstellte einen privaten Schlüssel, der sicher aufbewahrt und durch eine Passphrase zusätzlich geschützt wird, sowie einen entsprechenden öffentlichen Schlüssel.

Danach nutzten Sie das Werkzeug ssh-copy-id, um den öffentlichen Schlüssel sicher in die Datei der autorisierten Schlüssel auf dem Server zu übertragen. Dieser Befehl fügte den Schlüssel automatisch der Datei ~/.ssh/authorized_keys hinzu und autorisierte damit das Schlüsselpaar für den Zugriff. Der letzte Schritt bestand darin, die Verbindung durch Initiieren einer SSH-Sitzung zum Server zu testen. Die Authentifizierung erfolgte erfolgreich über die Passphrase des privaten Schlüssels anstelle des Benutzerpassworts, was bestätigte, dass die Authentifizierung über den öffentlichen Schlüssel korrekt funktioniert.