Anfänger-Leitfaden für SSH-Schlüssel: Sicher generieren, verwenden und verwalten
Secure Shell (SSH) ist der De-facto-Standard für den sicheren Fernzugriff auf Server und andere Netzwerkgeräte. Obwohl die passwortbasierte Authentifizierung üblich ist, kann sie anfällig für Brute-Force-Angriffe sein und erfordert das Merken komplexer Passwörter. SSH-Schlüssel bieten eine robustere und bequemere Alternative, die eine passwortlose Authentifizierung ermöglicht und Ihre allgemeine Sicherheitslage verbessert.
Diese Anleitung führt Sie durch die wesentlichen Schritte zum Generieren, Bereitstellen und Verwalten von SSH-Schlüsselpaaren. Durch das Verständnis und die Umsetzung dieser Praktiken können Sie die Sicherheit Ihres Fernzugriffs erheblich verbessern und Ihren Workflow optimieren. Wir behandeln die Kernkonzepte, praktische Befehle und Best Practices, um Ihnen den Einstieg in die SSH-Schlüsselauthentifizierung zu erleichtern.
SSH-Schlüsselpaare verstehen
Die SSH-Schlüsselauthentifizierung basiert auf einem Paar kryptografischer Schlüssel: einem privaten Schlüssel und einem öffentlichen Schlüssel. Diese Schlüssel sind mathematisch miteinander verknüpft, aber es ist rechnerisch nicht praktikabel, den privaten Schlüssel aus dem öffentlichen Schlüssel abzuleiten.
- Privater Schlüssel: Dieser Schlüssel muss geheim gehalten und darf niemals weitergegeben werden. Er befindet sich auf Ihrem lokalen Rechner und dient als Ihre Identität. Wenn Sie eine SSH-Verbindung initiieren, verwendet Ihr Client Ihren privaten Schlüssel, um Ihre Identität nachzuweisen.
- Öffentlicher Schlüssel: Dieser Schlüssel kann frei weitergegeben werden. Sie platzieren Ihren öffentlichen Schlüssel auf den Remote-Servern, auf die Sie zugreifen möchten. Wenn Sie versuchen, eine Verbindung herzustellen, verwendet der Server Ihren öffentlichen Schlüssel, um zu überprüfen, ob Sie den entsprechenden privaten Schlüssel besitzen.
Wenn Sie versuchen, sich mit einem Server zu verbinden, läuft der folgende Prozess ab:
- Ihr SSH-Client präsentiert dem Server Ihren öffentlichen Schlüssel.
- Der Server prüft, ob dieser öffentliche Schlüssel autorisiert ist (d. h. in seiner
authorized_keys-Datei vorhanden ist). - Wenn autorisiert, sendet der Server eine Herausforderung an Ihren Client.
- Ihr Client verwendet Ihren privaten Schlüssel, um die Herausforderung zu verschlüsseln, und sendet die verschlüsselte Antwort zurück an den Server.
- Der Server entschlüsselt die Antwort mithilfe Ihres öffentlichen Schlüssels. Wenn die Entschlüsselung erfolgreich ist und mit der ursprünglichen Herausforderung übereinstimmt, wird die Authentifizierung ohne Passwort gewährt.
Generieren von SSH-Schlüsselpaaren
Das gebräuchlichste Werkzeug zum Generieren von SSH-Schlüsselpaaren ist ssh-keygen. Dieser Befehl ist auf den meisten Linux-, macOS- und Windows-Systemen (über WSL oder Git Bash) verfügbar.
Verwendung von ssh-keygen
Um ein neues SSH-Schlüsselpaar zu generieren, öffnen Sie Ihr Terminal oder Ihre Eingabeaufforderung und führen Sie den folgenden Befehl aus:
ssh-keygen -t ed25519
Lassen Sie uns diesen Befehl aufschlüsseln:
ssh-keygen: Der Befehl zur Generierung von SSH-Schlüsseln.-t ed25519: Gibt den zu erstellenden Schlüsselsatztyp an.ed25519ist ein moderner, hochsicherer und schneller Algorithmus für elliptische Kurvenkryptographie. Andere gängige Optionen sindrsa(z. B.ssh-keygen -t rsa -b 4096für einen 4096-Bit-RSA-Schlüssel).
Nach der Ausführung des Befehls werden Ihnen einige Fragen gestellt:
- Dateiname zum Speichern des Schlüssels (z. B.
/home/Ihr_Benutzer/.ssh/id_ed25519): Drücken Sie die Eingabetaste, um den Standardspeicherort zu akzeptieren. Dadurch werden zwei Dateien in Ihrem.ssh-Verzeichnis erstellt:id_ed25519(Ihr privater Schlüssel) undid_ed25519.pub(Ihr öffentlicher Schlüssel). - Passphrase eingeben (leer lassen für keine Passphrase): Dies ist ein entscheidender Sicherheitsschritt. Die Eingabe einer Passphrase verschlüsselt Ihren privaten Schlüssel auf der Festplatte. Sollte Ihre private Schlüsseldatei jemals kompromittiert werden, benötigt der Angreifer immer noch die Passphrase, um sie zu verwenden. Es wird dringend empfohlen, eine starke Passphrase zu verwenden.
- Passphrase erneut eingeben: Bestätigen Sie Ihre Passphrase.
Die Ausgabedateien verstehen
Nach der Generierung werden zwei Dateien in Ihrem ~/.ssh/-Verzeichnis (oder dem von Ihnen angegebenen Pfad) erstellt:
id_ed25519(oderid_rsa): Ihr privater Schlüssel. GEBEN SIE DIESE DATEI NIEMALS WEITER. Beschränken Sie deren Berechtigungen auf Nur-Lesezugriff für Ihren Benutzer.id_ed25519.pub(oderid_rsa.pub): Ihr öffentlicher Schlüssel. Dies ist der Schlüssel, den Sie auf Servern verteilen werden.
Ihren privaten Schlüssel absichern
Es ist wichtig sicherzustellen, dass Ihr privater Schlüssel die korrekten Dateiberechtigungen hat. Unter Linux/macOS führen Sie Folgendes aus:
chmod 600 ~/.ssh/id_ed25519
Dieser Befehl beschränkt die Lese- und Schreibberechtigungen nur auf den Besitzer der Datei und verhindert, dass andere Benutzer auf dem System auf Ihren privaten Schlüssel zugreifen.
Bereitstellen Ihres öffentlichen Schlüssels auf einem Server
Sobald Sie Ihr SSH-Schlüsselpaar generiert haben, müssen Sie Ihren öffentlichen Schlüssel auf den Remote-Servern platzieren, auf die Sie zugreifen möchten.
Verwendung von ssh-copy-id (Empfohlen)
ssh-copy-id ist ein Dienstprogramm-Skript, das den Vorgang des Kopierens Ihres öffentlichen Schlüssels auf einen Remote-Server vereinfacht. Es hängt Ihren öffentlichen Schlüssel automatisch an die Datei ~/.ssh/authorized_keys auf dem Server an und legt die korrekten Berechtigungen fest.
Um ssh-copy-id zu verwenden, führen Sie den folgenden Befehl von Ihrem lokalen Rechner aus:
ssh-copy-id benutzer@remote_host
Ersetzen Sie benutzer durch Ihren Benutzernamen auf dem Remote-Server und remote_host durch die IP-Adresse oder den Hostnamen des Servers. Sie werden ein letztes Mal nach dem Passwort des benutzer auf dem remote_host gefragt, um die Schlüsselübertragung zu autorisieren.
Wenn Sie einen nicht standardmäßigen SSH-Port (z. B. 2222) verwenden, können Sie diesen mit der Option -p angeben:
ssh-copy-id -p 2222 benutzer@remote_host
Manuelle Bereitstellung (falls ssh-copy-id nicht verfügbar ist)
Wenn ssh-copy-id nicht verfügbar ist, können Sie Ihren öffentlichen Schlüssel manuell kopieren. Zeigen Sie zuerst den Inhalt Ihres öffentlichen Schlüssels auf Ihrem lokalen Rechner an:
cat ~/.ssh/id_ed25519.pub
Kopieren Sie die gesamte Ausgabe. Melden Sie sich dann über SSH mit Ihrem Passwort bei Ihrem Remote-Server an:
ssh benutzer@remote_host
Sobald Sie angemeldet sind, erstellen Sie das .ssh-Verzeichnis, falls es nicht existiert, und erstellen oder fügen Sie dann die Datei authorized_keys hinzu:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Fügen Sie nun den Inhalt Ihres öffentlichen Schlüssels in die Datei authorized_keys ein. Sie können dies mit einem Texteditor wie nano oder vim tun:
nano ~/.ssh/authorized_keys
Fügen Sie den kopierten öffentlichen Schlüssel in eine neue Zeile ein. Speichern Sie die Datei und beenden Sie den Editor.
Stellen Sie abschließend sicher, dass die Datei authorized_keys die korrekten Berechtigungen hat:
chmod 600 ~/.ssh/authorized_keys
Nachdem Sie diese Schritte ausgeführt haben, sollten Sie in der Lage sein, sich ohne Passwort auf dem Server anzumelden.
Verbinden mit SSH-Schlüsseln
Sobald Ihr öffentlicher Schlüssel auf dem Server ist, können Sie sich mit Ihrem privaten Schlüssel verbinden. Der SSH-Client versucht automatisch, Schlüssel zu verwenden, die sich in ~/.ssh/ befinden.
ssh benutzer@remote_host
Wenn Sie bei der Schlüsselgenerierung eine Passphrase verwendet haben, werden Sie aufgefordert, diese jetzt einzugeben. Wenn Sie keine Passphrase verwendet haben, werden Sie direkt angemeldet.
Angabe eines anderen Schlüssels
Wenn Sie mehrere SSH-Schlüsselpaare haben oder sich Ihr Schlüssel nicht am Standardspeicherort befindet, können Sie mit der Option -i angeben, welchen privaten Schlüssel Sie verwenden möchten:
ssh -i /pfad/zu/Ihrem/privaten_schlüssel benutzer@remote_host
Verwalten von SSH-Schlüsseln
Wenn Sie auf immer mehr Server zugreifen, sammeln Sie mehr SSH-Schlüssel an. Effektives Management ist der Schlüssel zur Wahrung von Sicherheit und Komfort.
SSH-Agent
Der SSH-Agent ist ein Hintergrundprogramm, das Ihre privaten Schlüssel entschlüsselt mit Ihrer Passphrase im Speicher hält. Dies ermöglicht es Ihnen, Ihre Schlüssel für mehrere SSH-Verbindungen zu verwenden, ohne jedes Mal Ihre Passphrase erneut eingeben zu müssen.
- Starten des SSH-Agenten: Der Agent wird oft automatisch gestartet, wenn Sie sich bei Ihrer Desktop-Umgebung anmelden. Falls nicht, können Sie ihn manuell starten:
bash eval "$(ssh-agent -s)" - Schlüssel zum Agenten hinzufügen: Sobald der Agent läuft, fügen Sie Ihren privaten Schlüssel/Ihre privaten Schlüssel hinzu:
bash ssh-add ~/.ssh/id_ed25519
Sie werden nach Ihrer Passphrase gefragt. Danach verwaltet der Agent den Schlüssel, und nachfolgende SSH-Verbindungen werden ihn automatisch verwenden.
SSH-Konfigurationsdatei (~/.ssh/config)
Die SSH-Client-Konfigurationsdatei (~/.ssh/config) ermöglicht es Ihnen, Aliase für Hosts zu definieren und Verbindungsparameter festzulegen, einschließlich dessen, welcher Schlüssel für einen bestimmten Host verwendet werden soll. Dies ist äußerst nützlich für die Verwaltung mehrerer Server.
Erstellen oder bearbeiten Sie die Datei ~/.ssh/config auf Ihrem lokalen Rechner und fügen Sie Einträge wie diese hinzu:
# Standardeinstellungen
Host *
ForwardAgent yes
ServerAliveInterval 60
# Server 1: Webserver
Host webserver
HostName 192.168.1.100
User webadmin
Port 2222
IdentityFile ~/.ssh/webserver_key
# Server 2: Datenbankserver
Host dbserver
HostName db.example.com
User dbuser
IdentityFile ~/.ssh/db_key
Mit dieser Konfiguration können Sie sich mit dem Webserver unter Verwendung von verbinden:
ssh webserver
Und mit dem Datenbankserver unter Verwendung von:
ssh dbserver
Der SSH-Client verwendet automatisch den korrekten Benutzernamen, Port und die private Schlüsseldatei, wie in der Datei ~/.ssh/config definiert.
Schlüsselrotation und -widerruf
- Rotation: Ziehen Sie regelmäßig eine Rotation Ihrer SSH-Schlüssel in Betracht, insbesondere für hochsensible Systeme. Dies beinhaltet das Generieren neuer Schlüssel und das Ersetzen der alten öffentlichen Schlüssel auf den Servern.
- Widerruf: Wenn ein privater Schlüssel kompromittiert wurde oder Sie keinen Zugriff mehr benötigen, müssen Sie den entsprechenden öffentlichen Schlüssel aus allen
authorized_keys-Dateien auf den Servern entfernen, auf denen er bereitgestellt wurde. Dies ist entscheidend für die Aufrechterhaltung der Sicherheit.
Best Practices und Sicherheitstipps
- Verwenden Sie Passphrasen: Schützen Sie Ihre privaten Schlüssel immer mit starken Passphrasen. Dies ist Ihre primäre Verteidigung gegen unbefugte Nutzung, falls die Datei des privaten Schlüssels gestohlen wird.
- Sichere Berechtigungen für den privaten Schlüssel: Stellen Sie sicher, dass Ihre private Schlüsseldatei die Berechtigungen
600(-rw-------) hat. - Verwenden Sie
ssh-agent: Nutzen Sie den SSH-Agenten, um zu vermeiden, dass Sie Ihre Passphrase wiederholt eingeben müssen. - Passwortauthentifizierung deaktivieren: Sobald die SSH-Schlüsselauthentifizierung funktioniert, sollten Sie in Erwägung ziehen, die passwortbasierte Authentifizierung auf Ihren Servern für eine zusätzliche Sicherheitsebene zu deaktivieren.
- Schlüssel aktuell halten: Verwenden Sie moderne, starke Algorithmen wie Ed25519. Vermeiden Sie ältere RSA-Schlüssel ohne ausreichende Bit-Länge (mindestens 4096).
- Vorsicht bei
authorized_keys: Fügen Sie nur öffentliche Schlüssel aus vertrauenswürdigen Quellen zu Ihrerauthorized_keys-Datei hinzu. - Regelmäßige Überprüfungen: Überprüfen Sie regelmäßig die
authorized_keys-Dateien auf Ihren Servern, um sicherzustellen, dass nur autorisierte Schlüssel vorhanden sind.
Fazit
SSH-Schlüssel sind ein mächtiges Werkzeug zur Verbesserung der Sicherheit und Bequemlichkeit der Verwaltung von Remote-Servern. Indem Sie die Generierung, Bereitstellung und Verwaltung von SSH-Schlüsselpaaren mithilfe von Tools wie ssh-keygen und ssh-copy-id beherrschen, können Sie die passwortbasierte Authentifizierung hinter sich lassen und einen sichereren und effizienteren Workflow für den Fernzugriff etablieren. Denken Sie daran, Sicherheit zu priorisieren, indem Sie starke Passphrasen verwenden und Ihre privaten Schlüssel schützen.