In diesem Beitrag möchten wir dir erklären, wie du auf deinem Server einen SSH Schlüssel zur Authentifizierung einrichten kannst.
Begriffe
Bevor wir den Beitrag beginnen, möchten wir noch einen Begriff erklären, der zum Verständnis des Beitrags wichtig ist:
Secure Socket Shell (SSH)
Secure Shell, manchmal auch als Secure Socket Shell bezeichnet, ist ein Protokoll, das es dir erlaubt, dich sicher mit einem entfernten Computer oder einem Server zu verbinden, indem du eine textbasierte Schnittstelle benutzt.
Wenn eine sichere SSH-Verbindung aufgebaut ist, wird eine Shell-Sitzung gestartet und du kannst den Server steuern, indem du Befehle innerhalb des SSH-Clients auf deinem lokalen Computer oder andern Server eingibst.
Um sich per SSH auf einen fremden Server zu verbinden, benötigt man eine Zugangsadresse (IPv4- oder IPv6 Adresse), einen Benutzername und ein Passwort oder ein Schlüssel.
Wie funktioniert der Verbindungsaufbau?
Um eine SSH-Verbindung aufzubauen, benötigst du zwei Komponenten: einen Client und die entsprechende serverseitige Komponente. Ein SSH-Client ist eine Anwendung, die du auf dem Computer installierst, mit dem du dich mit einem anderen Computer oder einem Server verbinden willst. Der Client nutzt die zur Verfügung gestellten Informationen des Remote-Hosts, um die Verbindung zu initiieren und stellt, wenn die Anmeldedaten verifiziert sind, die verschlüsselte Verbindung her.
Auf der Seite des Servers gibt es eine Komponente, die SSH-Daemon genannt wird und die ständig auf einem bestimmten TCP/IP-Port auf mögliche Verbindungsanfragen des Clients lauscht. Sobald ein Client eine Verbindung initiiert, antwortet der SSH-Daemon mit der Software und den Protokollversionen, die er unterstützt und die beiden tauschen ihre Identifikationsdaten aus. Wenn die angegebenen Anmeldedaten korrekt sind, erstellt SSH eine neue Sitzung für die entsprechende Umgebung.
Schlüsselbasierte Authentifizierung
Die schlüsselbasierte SSH-Authentifizierung nutzt die asymmetrische Verschlüsselung mit einem öffentlichen Schlüsseln (public key), um eine zusätzliche Sicherheitsebene für den Fernzugriff auf das System zu schaffen.
Das Konzept der Public-Key-Verschlüsselung wurde 1975 von Whitfield Diffie und Martin Hellman entwickelt und basiert auf der Verwendung eines Schlüsselpaars, eines privaten und eines öffentlichen Schlüssels. [Quelle]
In einem Verschlüsselungssystem mit öffentlichem Schlüssel wird der öffentliche Schlüssel verwendet, um Daten zu verschlüsseln, die nur vom Besitzer des privaten Schlüssels entschlüsselt werden können.
Bei der schlüsselbasierten SSH-Authentifizierung befindet sich der private Schlüssel auf dem Rechner, auf dem sich der SSH-Client befindet, während der entsprechende öffentliche Schlüssel auf dem System liegt, auf dem der SSH-Server läuft. Es ist wichtig, den privaten Schlüssel zu schützen, da der Besitz des Schlüssels es jedem ermöglicht, sich bei dem entfernten System anzumelden. Als zusätzliche Schutzebene kann der private Schlüssel daher auch verschlüsselt und durch ein Passwort geschützt werden, das bei jedem Verbindungsaufbau zum Server eingegeben werden muss.
Einrichtung der schlüsselbasierte Authentifizierung
Es gibt vier Schritte zum Einrichten der schlüsselbasierten SSH-Authentifizierung, die sich wie folgt zusammenfassen lassen:
- Erzeugen Sie den öffentlichen und den privaten Schlüssel
- Installieren des öffentlichen Schlüssel auf dem Server
- Testen der Authentifizierung
- (optional) Deaktivieren der kennwortbasierten Authentifizierung auf dem Server
SSH Service
Wenn der SSH Service nicht schon auf dem Server installiert ist, kann dieser über folgende Befehle installiert werden:
apt install openssh-server
systemctl start sshd.service
systemctl enable sshd.service
Wir zeigen nun beide Varianten der Erstellung und Einrichtung des SSH-Schlüsselpaares auf Linux und Windows.
Erstellung auf Linux
(Debian, Ubuntu o.ä)
Schlüsselerstellung
Der erste Schritt beim Einrichten der SSH-Schlüssel-basierten Authentifizierung besteht darin, die Schlüsselpaare auf dem Client-System zu generieren. Die Erstellung wird mithilfe von ssh-keygen durchgeführt:
ssh-keygen
Die Rückgabe sollte wie folgt aussehen:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxxx/.ssh/id_rsa):
Drücke die Eingabetaste, um den Standardspeicherort für die Schlüsseldateien zu akzeptieren. Dadurch werden zwei Dateien im .ssh Unterverzeichnis des Homeverzeichnisses des aktuellen Benutzers abgelegt. Der private Schlüssel wird in einer Datei namens id_rsa gespeichert, während der öffentliche Schlüssel in einer Datei namens id_rsa.pub liegt.
Als nächstes wird ssh-keygen nach einer Passphrase (Passwort) fragen, mit der der private Schlüssel geschützt werden soll. Wenn eine Passphrase angegeben wird, wird der private Schlüssel auf der lokalen Festplatte verschlüsselt und die Passphrase benötigt, um Zugriff auf das entfernte System zu erhalten. Wir empfehlen eine Passphrase zur erweiterten Sicherheit zu nutzen!
Enter passphrase (empty for no passphrase):
Zum Schluss wird das ssh-keygen Tool die folgende Ausgabe erzeugen, die anzeigt, dass die Schlüssel generiert wurden:
Your identification has been saved in /home/ben/.ssh/id_rsa.
Your public key has been saved in /home/ben/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FDGVGWEEGFIjWnCT5wtTOv5VK4hdimzWghZizdD25TTbfo @
The key's randomart image is:
+---[RSA 2048]----+
|.BR+=+*.. |
|o+d= * . . |
|==+.. + . |
|*d * . . |
|.++ j S |
|..E+ * o |
| e B * |
| + - |
| . |
+----[SHA256]-----+
SSH Schlüssel einsetzen
Der nächste Schritt ist die Installation des öffentlichen Schlüssels auf dem entfernten Serversystem. Dies kann mit dem Programm ssh-copy-id gemacht werden:
ssh-copy-id username@remote_hostname
Bei username gibst du den Zugangsnutzer auf dem externen Server an und bei “remote_hostname” die IP oder Domain des externen Servers. Danach wirst du nach dem Benutzerpasswort gefragt. Gebe dies ein und danach ist der Schlüssel kopiert und du erhältst ca. folgende Ausgabe:
ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ben/.ssh/id_rsa.pub"
/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
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
Damit wurde nun erfolgreich der SSH Schlüssel auf dem zweiten System installiert, welches sich nun mit dem Schlüssel anmelden kann.
Erstellung auf Windows
Schlüsselerstellung
Der erste Schritt beim Einrichten der SSH-Schlüssel-basierten Authentifizierung besteht darin, die Schlüsselpaare auf dem Client-System zu generieren. Die Erstellung wird mithilfe von Putty durchgeführt:
32-bit: | putty-0.75-installer.msi |
64-bit: | putty-64bit-0.75-installer.msi |
64-bit x86: | putty-arm64-0.75-installer.msi |
Um neue Schlüssel zu erstellen, starte PuttyGen und klicke auf den Button Generate:
Bewege nun deine Maus umher, damit der Schlüssel zufällig erstellt wird.
Sobald folgender Inhalt erscheint, ist die Erstellung abgeschlossen. Du kannst nun eine Schlüssel-Passphrase angeben. Wenn eine Passphrase angegeben wird, wird der private Schlüssel auf der lokalen Festplatte verschlüsselt und die Passphrase benötigt, um Zugriff auf das entfernte System zu erhalten. Wir empfehlen eine Passphrase zur erweiterten Sicherheit zu nutzen!
Klicke nun auf “Save public key” und “Save private key” und lasse diese im Windows-Verzeichnis %UserProfile%/.ssh/
speichern.
SSH Schlüssel einsetzen
Öffne den erstellen public-key mit einem Windows-Texteditor deiner Wahl.
Um den öffentlichen Schlüssel nun zu installieren, melde dich auf dem Server an, bearbeite die authorized_keys ( nano ~/.ssh/authorized_keys
) Datei und füge den öffentlichen Schlüssel, in einer neuen Zeile, in die authorized_keys Datei ein. Speichere die Datei ab.
Es bedarf keinem reload oder ähnlichem.
Testen
Ob der Key erkannt und genutzt werden kann, kannst du wie folgt überprüfen.
Öffne die Eingabeaufforderung in Windows und gebe ein:
ssh username@remote_hostname
Bei username gibst du den Zugangsnutzer auf dem externen Server an und bei “remote_hostname” die IP oder Domain des externen Servers. Danach wirst du nach dem Benutzerpasswort gefragt.
Solltest du dein Private-File an einem anderen Ort als .ssh gespeichert haben, kannst du diesen mit dem Paramater -i definieren. Beispiel:
ssh -i C:/ABC/123/private_ssh.key username@remote_hostname
Passwort-Authentifizierung deaktivieren
Im Moment kann der Zugriff auf das entfernte System immer noch mit der weniger sicheren Passwort-Authentifizierung erreicht werden. Sobald du sichergestellt hast, dass die schlüsselbasierte Authentifizierung funktioniert, logge dich in das entfernte System ein, editiere die Datei /etc/ssh/ssh_config und ändere die Einstellung PasswordAuthentication auf no:
nano /etc/ssh/ssh_config
PasswordAuthentication no
Speichere die Datei und starte den sshd-Dienst neu, um die Änderung wirksam zu machen:
systemctl restart sshd.service
Ab diesem Zeitpunkt ist ein Fernzugriff auf das System nur noch über eine SSH-Schlüssel-basierte Authentifizierung möglich.
Abschluss
Hiermit ist die Einrichtung auch abgeschlossen. Auf weiteren Systemen kann ab nun immer ab Schritt “SSH Schlüssel einsetzen” gearbeitet werden. Der Schlüssel bleibt ab nun immer gleich.