Das Passwort ist das schwächste Glied eines jeden Servers, der im Internet exponiert ist. Es kann erraten, wiederverwendet, abgefangen oder durch Brute-Force-Angriffe geknackt werden. Die Authentifizierung über SSH-Schlüssel löst das Problem an der Wurzel: Anstelle eines Geheimnisses, das man eintippt, verwendet man ein Schlüsselpaar, das nahezu unmöglich zu erraten ist. Es ist sicherer und im Alltag auch praktischer: kein Passwort mehr bei jeder Verbindung eingeben.
Dieser Leitfaden deckt den gesamten Lebenszyklus eines SSH-Schlüssels auf einem VPS Linux ab: das Prinzip verstehen, ein modernes Schlüsselpaar mit ssh-keygen generieren, es auf dem Server installieren, sich verbinden, den SSH-Agenten verwenden und schließlich die Passwortauthentifizierung vollständig deaktivieren, um den Zugriff zu sperren.
Wie funktioniert ein SSH-Schlüsselpaar?
Die Authentifizierung über Schlüssel basiert auf zwei komplementären Dateien:
- Der private Schlüssel bleibt auf Ihrem Computer. Er darf niemals Ihre Maschine verlassen oder geteilt werden. Es ist Ihr Geheimnis.
- Der öffentliche Schlüssel wird auf dem Server abgelegt. Er kann frei zirkulieren: den öffentlichen Schlüssel zu kennen, ermöglicht es nicht, den privaten Schlüssel zu rekonstruieren.
Bei der Verbindung sendet der Server eine Herausforderung, die nur der entsprechende private Schlüssel lösen kann. Wenn der Nachweis gültig ist, wird der Zugriff gewährt, ohne dass ein Geheimnis über das Netzwerk übertragen wird. Das macht die Methode sowohl sicherer als auch widerstandsfähiger gegen Abhörversuche.
Voraussetzungen
- Zugriff auf Ihren VPS unter Linux (Ubuntu, Debian…) über SSH.
- Ein Terminal auf Ihrem Computer: Terminal unter macOS/Linux oder PowerShell / Windows Terminal unter Windows (OpenSSH ist seit Windows 10 integriert).
- Einige Minuten. Es ist das einfachste Tutorial im Sicherheitsprozess und das rentabelste.
Ein SSH-Schlüsselpaar mit ssh-keygen generieren
Die Generierung erfolgt auf Ihrem Computer, nicht auf dem Server. Öffnen Sie Ihr Terminal und starten Sie:
ssh-keygen -t ed25519 -C "[email protected]"
Einige Erklärungen:
-t ed25519wählt den Algorithmus. Ed25519 ist heute der empfohlene Standard: kurze, sehr schnelle und sehr sichere Schlüssel. Wenn Sie mit einem alten System arbeiten müssen, das dies nicht unterstützt, verwenden Sie-t rsa -b 4096.-Cfügt einen Kommentar hinzu (typischerweise Ihre E-Mail), um den Schlüssel später zu identifizieren.
ssh-keygen stellt dann zwei Fragen:
- Der Speicherort der Datei: Bestätigen Sie den Standardpfad (
~/.ssh/id_ed25519) durch Drücken der Eingabetaste. - Ein geheimes Passwort (Passphrase): Es ist ein Passwort, das Ihren privaten Schlüssel auf der Festplatte verschlüsselt. Wählen Sie eines. So bleibt der gestohlene Schlüssel selbst dann unbrauchbar, wenn Ihr Computer kompromittiert wird. Der SSH-Agent (siehe unten) verhindert, dass Sie es bei jeder Verbindung erneut eingeben müssen.
Zwei Dateien werden in ~/.ssh/ erstellt:
id_ed25519 → Ihr privater Schlüssel (geheim halten)
id_ed25519.pub → Ihr öffentlicher Schlüssel (auf dem Server ablegen)
Den öffentlichen Schlüssel auf dem Server installieren
Das Ziel ist es, Ihren öffentlichen Schlüssel zur Datei ~/.ssh/authorized_keys Ihres Benutzers auf dem VPS hinzuzufügen. Die einfachste Methode ist ssh-copy-id:
ssh-copy-id benutzer@SERVER_IP
Der Befehl fragt Sie ein letztes Mal nach Ihrem Passwort (dem des Servers), kopiert und konfiguriert alles automatisch mit den richtigen Berechtigungen. Das war's.
Wenn ssh-copy-id nicht verfügbar ist (unter Windows zum Beispiel), funktioniert die manuelle Methode überall:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh benutzer@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Unter macOS/Linux das Äquivalent:
cat ~/.ssh/id_ed25519.pub | ssh benutzer@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Mit dem Schlüssel verbinden
Testen Sie sofort die Verbindung über den Schlüssel, bevor Sie irgendetwas anderes ändern:
ssh benutzer@SERVER_IP
Wenn Sie eine Passphrase festgelegt haben, wird sie abgefragt (es ist die der Schlüssel, nicht die des Servers). Sie sind ohne das Passwort des Servers verbunden: Der Schlüssel funktioniert. Gehen Sie erst zur Deaktivierung des Passworts über, wenn diese Verbindung bestätigt ist.
Den SSH-Agenten verwenden, um die Passphrase nicht erneut einzugeben
Die Passphrase bei jeder Verbindung einzugeben, wird schnell mühsam. Der SSH-Agent hält Ihren Schlüssel während Ihrer Sitzung im Speicher entsperrt. Starten Sie ihn und fügen Sie Ihren Schlüssel hinzu:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Sie geben die Passphrase nur einmal ein; die folgenden Verbindungen sind transparent. Unter macOS können Sie den Schlüssel im Schlüsselbund des Systems mit ssh-add --apple-use-keychain speichern. Unter Windows aktivieren Sie den Dienst ssh-agent (Get-Service ssh-agent | Set-Service -StartupType Automatic) und dann ssh-add.
Um die derzeit im Agenten geladenen Schlüssel aufzulisten:
ssh-add -l
Die SSH-Konfigurationsdatei (praktischer Bonus)
Um die IP und den Benutzer nicht jedes Mal eingeben zu müssen, erstellen Sie eine Verknüpfung in ~/.ssh/config auf Ihrem Computer:
Host meinvps
HostName 203.0.113.10
User meinbenutzer
IdentityFile ~/.ssh/id_ed25519
Ein einfacher Befehl ssh meinvps reicht dann aus, um sich zu verbinden.
Die Passwortauthentifizierung deaktivieren
Dies ist der Schritt, der Ihren Server tatsächlich absichert: Sobald die Verbindung über den Schlüssel bestätigt ist, wird das Passwort vollständig verboten. So ist selbst der beste Brute-Force-Angriff nutzlos.
Warnung: tun Sie dies nur, nachdem Sie überprüft haben, dass die Verbindung über den Schlüssel funktioniert. Halten Sie idealerweise eine zweite SSH-Sitzung während der Manipulation offen, als Sicherheitsnetz.
Auf dem Server bearbeiten Sie die Konfiguration des SSH-Daemons:
sudo nano /etc/ssh/sshd_config
Stellen Sie sicher, dass Sie diese Direktiven haben (entkommentieren Sie sie und passen Sie die Werte an):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin prohibit-password
PermitRootLogin prohibit-password erlaubt root nur über Schlüssel (oder deaktiviert es mit no, wenn Sie immer über einen sudo-Benutzer gehen, was vorzuziehen ist). Speichern Sie, und laden Sie den Dienst neu:
sudo systemctl restart ssh
Auf einigen neueren Distributionen kann die Konfiguration durch eine Datei in /etc/ssh/sshd_config.d/ überschrieben werden. Wenn PasswordAuthentication no ignoriert zu werden scheint, überprüfen Sie diesen Ordner. Testen Sie dann eine neue Verbindung: Das Passwort sollte nicht mehr akzeptiert werden.
Best Practices
- Ein Schlüssel pro Gerät. Generieren Sie ein separates Paar auf jedem Computer, von dem aus Sie sich verbinden, anstatt denselben privaten Schlüssel überall zu kopieren. Im Falle eines Verlusts eines Geräts entfernen Sie einfach seinen öffentlichen Schlüssel vom Server.
- Schützen Sie den privaten Schlüssel mit einer Passphrase. Ein privater Schlüssel ohne geheimes Passwort bietet jedem, der die Datei in die Hände bekommt, vollen Zugriff.
- Teilen Sie niemals den privaten Schlüssel. Nur die Datei
.pubwird übertragen. - Sichern Sie Ihre Schlüssel an einem sicheren Ort: den privaten Schlüssel zu verlieren bedeutet, den konfigurierten Zugriff zu verlieren.
- Kombinieren Sie mit einer Firewall. Den SSH-Port einschränken und nur das Notwendige öffnen, verstärkt die Sicherheit, siehe den UFW-Schritt im folgenden Verlauf.
Fehlerbehebung: „Permission denied (publickey)“
Dies ist der häufigste Fehler, und er resultiert fast immer aus den Berechtigungen der Dateien. SSH verweigert die Verwendung eines Verzeichnisses oder einer Datei mit zu großzügigen Berechtigungen. Korrigieren Sie auf dem Server:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Weitere häufige Ansätze:
- Falscher Benutzer oder falscher Schlüssel: Überprüfen Sie, ob Sie sich mit dem richtigen Konto verbinden und ob der entsprechende private Schlüssel vorhanden ist (
ssh -i ~/.ssh/id_ed25519 benutzer@IP). - Detaillierte Diagnose: Fügen Sie
-v(oder sogar-vvv) zu Ihremssh-Befehl hinzu, um genau zu sehen, welcher Schlüssel angeboten wird und wo es blockiert. - Fehlerhaftes authorized_keys: Der öffentliche Schlüssel muss in einer einzigen Zeile stehen.
Häufig gestellte Fragen
Ed25519 oder RSA? Ed25519 für jeden modernen Server: kürzer, schneller, ebenso sicher. RSA 4096 bleibt eine gültige Rückfalloption für alte Systeme.
Was tun, wenn ich meinen privaten Schlüssel verliere? Sie können sich nicht mehr damit verbinden. Verbinden Sie sich auf andere Weise (anderer Schlüssel, Notfallkonsole des VPS), entfernen Sie dann den alten öffentlichen Schlüssel aus authorized_keys und fügen Sie einen neuen hinzu.
Kann ich denselben Schlüssel auf mehreren Servern verwenden? Technisch ja: Sie müssen nur den gleichen öffentlichen Schlüssel auf jedem ablegen. Aber bevorzugen Sie einen Schlüssel pro Arbeitsplatz, anstatt einen einzigen Schlüssel auf allen Ihren Maschinen zu duplizieren.
Funktionieren SSH-Schlüssel unter Windows? Ja, OpenSSH ist in Windows 10 und 11 integriert. Alle Befehle in diesem Leitfaden funktionieren in PowerShell oder Windows Terminal.
Der Sicherheitsprozess für Ihren Server
Die Authentifizierung über Schlüssel ist der erste Baustein eines gut gesicherten Servers, der die Eingangstür schließt. Um den Prozess auf Ihrem VPS Linux abzuschließen, fahren Sie mit dem Rest des Prozesses fort:
- SSH-Schlüssel ersetzen Sie das Passwort durch eine Schlüsselauthentifizierung (Sie sind hier).
- UFW schließen Sie alle unnötigen Ports mit einer einfachen Firewall (Leitfaden folgt).
- Fail2ban sperren Sie automatisch Angreifer, die hartnäckig sind (Leitfaden folgt).
- Certbot verschlüsseln Sie Ihre Dienste mit einem Let's Encrypt SSL-Zertifikat (Leitfaden folgt).
Finden Sie alle unsere Tutorials in der Linux-Dokumentation. In weniger als zehn Minuten verwandeln Sie den Zugriff auf Ihren Server: von „anfälligem Passwort“ zu „kryptografischem Schlüssel, der unmöglich zu erraten ist“.
