Generieren und Sichern von SSH-Schlüsseln für den Remote-Zugriff
Secure Shell (SSH) ist das Standardprotokoll für die sichere Verbindung zu Remote-Servern und -Systemen. Obwohl die Passwortauthentifizierung üblich ist, bietet die Verwendung von SSH-Schlüsselpaaren eine wesentlich stärkere, bequemere und widerstandsfähigere Authentifizierungsmethode. Diese umfassende Anleitung führt Sie durch das Generieren robuster SSH-Schlüsselpaare, deren Sicherung mit Passphrasen und die Nutzung von ssh-agent für nahtlosen, sicheren Remote-Zugriff.
Das Verständnis des Schlüsselmanagements ist entscheidend für die Aufrechterhaltung der Sicherheit Ihrer Infrastruktur. Durch den Ersatz anfälliger Passwörter durch kryptografische Schlüssel mindern Sie Risiken, die mit Brute-Force-Angriffen und Credential Stuffing verbunden sind, und schaffen die Grundlage für eine sichere Remote-Konnektivität.
SSH-Schlüsselpaare verstehen
Ein SSH-Schlüsselpaar besteht aus zwei verschiedenen Komponenten:
- Der private Schlüssel: Dieser Schlüssel darf niemals weitergegeben werden. Er verbleibt sicher auf Ihrem lokalen Rechner und wird verwendet, um Ihre Identität gegenüber dem Remote-Server nachzuweisen.
- Der öffentliche Schlüssel: Dieser Schlüssel wird frei weitergegeben und in die Datei
~/.ssh/authorized_keysauf dem oder den Remote-Servern hochgeladen, auf die Sie zugreifen möchten. Der Server verwendet diesen Schlüssel, um die Signatur zu überprüfen, die von Ihrem privaten Schlüssel generiert wurde.
Auswahl des richtigen Algorithmus
Beim Generieren von Schlüsseln ist es unerlässlich, einen modernen, starken kryptografischen Algorithmus zu wählen. RSA ist zwar immer noch weit verbreitet, aber Ed25519 wird oft wegen seiner Geschwindigkeit und starken Sicherheitsgarantien empfohlen.
Schritt 1: Generieren des SSH-Schlüsselpaars
Das Dienstprogramm ssh-keygen ist das Standardwerkzeug zur Erstellung von SSH-Schlüsselpaaren unter Linux, macOS und Windows (über Git Bash oder WSL).
Generieren eines Ed25519-Schlüssels (Empfohlen)
Um einen modernen Ed25519-Schlüssel zu erstellen, verwenden Sie den folgenden Befehl. Wir geben den Schlüsselaustyp (-t ed25519) und einen Kommentar (-C) an, um den Zweck oder den Eigentümer des Schlüssels zu identifizieren:
ssh-keygen -t ed25519 -C "[email protected]_or_host_name"
Wenn Sie dazu aufgefordert werden:
- Datei zum Speichern des Schlüssels eingeben: Drücken Sie die Eingabetaste, um den Standardort (
/home/user/.ssh/id_ed25519) zu akzeptieren. - Passphrase eingeben (empfohlen): Legen Sie immer eine starke Passphrase fest. Diese verschlüsselt Ihren privaten Schlüssel, sodass selbst bei Diebstahl der Datei niemand ihn ohne die Passphrase verwenden kann.
Generieren eines RSA-Schlüssels (Alternative)
Falls Kompatibilität mit sehr alten Systemen erforderlich ist, können Sie einen RSA-Schlüssel generieren und dabei sicherstellen, dass Sie eine ausreichende Schlüssellänge angeben (mindestens 4096 Bit):
ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"
Ausgabe-Dateien des Schlüssels
Nach der Generierung werden zwei Dateien in Ihrem ~/.ssh/-Verzeichnis erstellt (bei Verwendung der Standardeinstellungen):
id_ed25519(oderid_rsa): Ihr privater Schlüsselid_ed25519.pub(oderid_rsa.pub): Ihr öffentlicher Schlüssel
Sicherheits-Best-Practice: Teilen Sie niemals die Datei ohne die Erweiterung
.pub. Setzen Sie restriktive Berechtigungen für Ihren privaten Schlüssel (chmod 600 ~/.ssh/id_ed25519).
Schritt 2: Kopieren des öffentlichen Schlüssels auf den Server
Der Remote-Server muss Ihren öffentlichen Schlüssel in seiner Datei ~/.ssh/authorized_keys haben, um den Zugriff zu gewähren.
Verwendung von ssh-copy-id (Die einfachste Methode)
Das Dienstprogramm ssh-copy-id automatisiert diesen Vorgang und kümmert sich um die Verzeichnis- und Berechtigungseinstellungen auf dem Remote-Server. Für diese Ersteinrichtung müssen Sie sich ein letztes Mal mit einem Passwort authentifizieren.
ssh-copy-id user@remote_host_ip
Wenn erfolgreich, teilt Ihnen der Befehl mit, dass die Schlüssel hinzugefügt wurden. Sie können nun versuchen, sich anzumelden.
Manuelles Kopieren (Wenn ssh-copy-id nicht verfügbar ist)
Wenn Sie ssh-copy-id nicht verwenden können, können Sie den Inhalt des öffentlichen Schlüssels manuell anhängen. Zeigen Sie zuerst den öffentlichen Schlüssel an:
cat ~/.ssh/id_ed25519.pub
Melden Sie sich dann mit Ihrem Passwort beim Remote-Server an und hängen Sie die Ausgabe an die Datei authorized_keys an:
# Auf dem Remote-Server
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Ersetzen Sie <PASTE_YOUR_PUBLIC_KEY_HERE> durch den tatsächlichen Schlüsselinhalt
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Schritt 3: Sichern des Zugriffs mit ssh-agent
Das ständige Eingeben Ihrer Passphrase bei jeder Verbindung zu einem Server wird mühsam. Der ssh-agent ist ein Hintergrundprogramm, das Ihre entschlüsselten privaten Schlüssel sicher im Speicher hält, sodass Sie sie verwenden können, ohne die Passphrase wiederholt eingeben zu müssen.
Starten und Verwenden von ssh-agent
-
Stellen Sie sicher, dass der Agent läuft: Auf den meisten modernen Linux-/macOS-Systemen startet der Agent automatisch beim Anmelden. Sie können seinen Status überprüfen, indem Sie nach den Umgebungsvariablen suchen:
bash echo $SSH_AUTH_SOCK -
Fügen Sie Ihren Schlüssel zum Agenten hinzu: Verwenden Sie den Befehl
ssh-add, um Ihren privaten Schlüssel zu laden. Sie werden nur einmal nach der Passphrase gefragt.```bash
ssh-add ~/.ssh/id_ed25519Geben Sie die Passphrase für /home/user/.ssh/id_ed25519 ein: ****
Identität hinzugefügt: /home/user/.ssh/id_ed25519 (comment)
```
-
Geladene Schlüssel überprüfen:
bash ssh-add -l
Wenn Sie nun ssh user@remote_host_ip ausführen, authentifiziert sich die Verbindung mithilfe des vom Agenten gehaltenen Schlüssels, ohne erneut nach der Passphrase zu fragen (bis die Agent-Sitzung beendet wird).
Wichtige Hinweise zu ssh-agent
- Sitzungsabhängig: Die in den Agenten geladenen Schlüssel sind in der Regel nur für die aktuelle Terminalsitzung oder Desktop-Anmeldesitzung verfügbar. Sie müssen
ssh-adderneut ausführen, nachdem Sie sich ab- und wieder angemeldet haben. - Schlüssellebensdauer: Sie können eine maximale Lebensdauer für im Agenten gehaltene Schlüssel mit der Option
-tfestlegen (z. B. hältssh-add -t 1h ~/.ssh/id_ed25519den Schlüssel für eine Stunde geladen).
Erweiterte Sicherheit: Deaktivieren der Passwortauthentifizierung
Sobald Sie bestätigt haben, dass die schlüsselbasierte Authentifizierung auf allen erforderlichen Servern einwandfrei funktioniert, ist die stärkste Sicherheitsmaßnahme die vollständige Deaktivierung von passwortbasierten Anmeldungen. Dies verhindert Brute-Force-Angriffe auf Passwörter.
- Stellen Sie über SSH mit Ihrem Schlüssel eine Verbindung zu Ihrem Server her.
-
Bearbeiten Sie die SSH-Daemon-Konfigurationsdatei, die sich normalerweise unter
/etc/ssh/sshd_configbefindet:bash sudo nano /etc/ssh/sshd_config -
Suchen und setzen Sie die folgenden Anweisungen:
```config
Stellen Sie sicher, dass dies auf yes gesetzt ist (normalerweise Standard)
PubkeyAuthentication yes
Deaktivieren Sie Passwortanmeldungen
PasswordAuthentication no
``` -
Starten Sie den SSH-Dienst neu, um die Änderungen zu übernehmen:
```bash
sudo systemctl restart sshd # Für systemd-basierte Systeme (die meisten modernen Linux-Distributionen)ODER
sudo service ssh restart # Ältere Systeme
```
Warnung: Stellen Sie sicher, dass Sie sich mindestens einmal erfolgreich mit Ihrem neuen Schlüssel angemeldet haben, bevor Sie die Passwortauthentifizierung deaktivieren. Sich aufgrund eines Konfigurationsfehlers auszusperren, ist ein häufiger, behebbarer Fehler, erfordert jedoch Konsolen- oder alternativen Zugriff.
Zusammenfassung und nächste Schritte
Das Generieren und Verwalten von SSH-Schlüsseln ist eine grundlegende Fähigkeit für die sichere Systemadministration. Wenn Sie diese Schritte befolgen – moderne Ed25519-Schlüssel generieren, den privaten Schlüssel mit einer starken Passphrase schützen, den öffentlichen Schlüssel sicher auf Zielservern installieren und ssh-agent nutzen – schaffen Sie einen hochsicheren und effizienten Authentifizierungsmechanismus.
Nächste Schritte:
- Generieren Sie für jedes wichtige System oder jeden Dienst, auf den Sie zugreifen, ein eindeutiges Schlüsselpaar.
- Überprüfen Sie regelmäßig die Datei
authorized_keysauf kritischen Servern. - Verwenden Sie nach Möglichkeit unterschiedliche Passphrasen für verschiedene Schlüsselpaare, oder stellen Sie zumindest sicher, dass diese komplex sind.