Sie erstellen einen SSH-Schlüssel, laden ihn auf Ihren VPS hoch und melden sich ohne Passwort an. Zum Schluss schalten Sie die Passwortanmeldung aus, sodass das Erraten von Passwörtern sinnlos wird. Die Schritte decken Windows, macOS, Linux und PuTTY ab.
Was Sie brauchen
- Ein StormHost-VPS mit Ubuntu 24.04 oder Debian 13
- Eine funktionierende SSH-Verbindung mit Passwort (Anleitung)
- Ein Computer mit Windows 10/11, macOS oder Linux
- Etwa 15 Minuten
Wie ein SSH-Schlüssel funktioniert#
Ein SSH-Schlüssel besteht aus zwei zusammengehörigen Dateien:
| Datei | Beispielname | Wo sie liegt | Wem Sie sie geben |
|---|---|---|---|
| Privater Schlüssel | id_ed25519 (PuTTY: .ppk) | Nur auf Ihrem Computer. | Niemandem. Wer ihn hat, kann sich als Sie anmelden. |
| Öffentlicher Schlüssel | id_ed25519.pub | Auf dem VPS in der Datei ~/.ssh/authorized_keys. | Sie können ihn überall ablegen; er lässt sich nicht missbrauchen. |
Bei der Anmeldung sendet der VPS Ihrem Computer eine Aufgabe, die nur der Inhaber des privaten Schlüssels lösen kann. Der private Schlüssel verlässt Ihren Computer nie. Ein ed25519-Schlüssel ist modern, kurz und sicher, und alle aktuellen Systeme unterstützen ihn.
Den privaten Schlüssel können Sie zusätzlich mit einem Schlüsselpasswort (Passphrase) sperren. Kopiert jemand Ihre Schlüsseldatei, kann er sie ohne dieses Passwort nicht verwenden.
Schlüssel erstellen#
Windows
Öffnen Sie das Terminal (Rechtsklick auf Start › Terminal; unter Windows 10 Windows PowerShell).
Führen Sie aus:
PowerShell ssh-keygen -t ed25519 -C "notebook-jan"Drücken Sie bei der Frage
Enter file in which to save the key (C:\Eingabe. Der Schlüssel wird am Standardort gespeichert, wo SSH ihn von selbst findet.Users\ jan/ .ssh/ id_ ed25519): Geben Sie bei
Enter passphraseein Schlüsselpasswort ein und drücken Sie Eingabe. Wiederholen Sie es beiEnter same passphrase again. Das Passwort wird nicht angezeigt. Lassen Sie es leer, ist der Schlüssel nicht gesperrt.
Ergebnis: die Dateien C:\ (privat) und id_ed25519.pub (öffentlich).
macOS
Öffnen Sie die App Terminal.
Führen Sie aus:
bash ssh-keygen -t ed25519 -C "macbook-jan"Drücken Sie bei der Frage
Enter file in which to save the keyEingabe.Geben Sie das Schlüsselpasswort (Passphrase) ein und wiederholen Sie es.
Ergebnis: ~/.ssh/id_ed25519 und ~/.ssh/id_ed25519.pub.
Linux
Öffnen Sie ein Terminal.
Führen Sie aus:
bash ssh-keygen -t ed25519 -C "pc-jan"Drücken Sie bei der Frage
Enter file in which to save the keyEingabe.Geben Sie das Schlüsselpasswort (Passphrase) ein und wiederholen Sie es.
Ergebnis: ~/.ssh/id_ed25519 und ~/.ssh/id_ed25519.pub.
Was der Befehl tut:
ssh-keygen– ein Programm zum Erstellen von SSH-Schlüsseln.-t ed25519– der Schlüsseltyp. Wir empfehlen Ed25519. Verwenden Sie den älteren Typ RSA nur für Geräte, die ed25519 nicht beherrschen, und dann mit der Länge-t rsa -b 4096.-C "notebook-jan"– eine Kennung (Kommentar) am Ende des öffentlichen Schlüssels. Sie sagt Ihnen auf dem VPS, von welchem Computer der Schlüssel stammt. Die Kennung sichert nichts ab; sie dient nur der Orientierung.
Sie haben bereits einen Schlüssel?
Wenn ssh-keygen … already exists. Overwrite (y/n)? sagt, antworten Sie mit n. Beim Überschreiben würden Sie Ihren alten Schlüssel und Ihren Zugang überall verlieren, wo Sie ihn verwenden. Verwenden Sie den alten Schlüssel ruhig auch für den VPS.
Schlüssel in PuTTYgen erstellen#
Wenn Sie sich mit PuTTY verbinden, erstellen Sie den Schlüssel in PuTTYgen, das zusammen mit PuTTY installiert wird.
- Starten Sie PuTTYgen.
- Wählen Sie unter Parameters den Typ EdDSA und daneben Ed25519 (255 bits).
- Klicken Sie auf Generate und bewegen Sie die Maus über den leeren Bereich des Fensters, bis sich der Fortschrittsbalken füllt. Die Mausbewegung dient als Zufallsquelle.
- Geben Sie im Feld Key comment eine Kennung ein, zum Beispiel
notebook-jan. - Geben Sie in die Felder Key passphrase und Confirm passphrase ein Schlüsselpasswort ein.
- Klicken Sie auf Save private key und speichern Sie die Datei, zum Beispiel
C:\. Das ist der private Schlüssel.Users\ <BENUTZER>\ .ssh\ vps. ppk - Markieren und kopieren Sie den gesamten Text im Feld Public key for pasting into OpenSSH authorized_keys file. Er beginnt mit
ssh-ed25519 AAAA…und endet mit der Kennung. Das ist der öffentliche Schlüssel, den Sie von Hand auf den VPS hochladen (siehe die Registerkarte Manuell unten).
Die Schaltfläche Save public key speichert den öffentlichen Schlüssel in einem anderen Format, das der VPS nicht akzeptiert. Kopieren Sie immer den Text aus dem Feld.
Öffentlichen Schlüssel auf den VPS hochladen#
Windows
Windows hat den Befehl ssh-copy-id nicht. Dieser PowerShell-Befehl erledigt dasselbe (ersetzen Sie 203.0.113.10 durch die IP-Adresse Ihres VPS):
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"type $env:– gibt den Inhalt des öffentlichen Schlüssels aus (USERPROFILE\ .ssh\ id_ ed25519. pub $env:USERPROFILEist Ihr OrdnerC:\Users\<BENUTZER>).|– übergibt die Ausgabe als Eingabe an den nächsten Befehl.ssh [email protected] "…"– verbindet sich mit dem VPS (fragt nach dem Root-Passwort) und führt die Befehle in Anführungszeichen aus.mkdir -p ~/.ssh– legt den Ordner.sshan, falls er noch nicht existiert.chmod 700 ~/.ssh– nur der Besitzer kann den Ordner öffnen. Zu offene Berechtigungen lehnt SSH ab.cat >> ~/.ssh/authorized_keys– hängt den Schlüssel an das Ende der Datei an. Bereits vorhandene Schlüssel bleiben.chmod 600 ~/.ssh/authorized_keys– nur der Besitzer kann die Datei lesen und ändern.
macOS
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– lädt den öffentlichen Schlüssel auf den Server hoch und setzt die richtigen Berechtigungen.-i ~/.ssh/id_ed25519.pub– welcher Schlüssel hochgeladen wird.[email protected]– Benutzer und Adresse des VPS.
Es fragt nach dem Root-Passwort und gibt am Ende Number of key(s) added: 1 aus.
Linux
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– lädt den öffentlichen Schlüssel auf den Server hoch und setzt die richtigen Berechtigungen.-i ~/.ssh/id_ed25519.pub– welcher Schlüssel hochgeladen wird.
Es fragt nach dem Root-Passwort und gibt am Ende Number of key(s) added: 1 aus.
Manuell
Nützlich für einen Schlüssel aus PuTTYgen oder wenn die vorherigen Methoden bei Ihnen nicht funktionieren.
Verbinden Sie sich mit Passwort mit dem VPS (PuTTY, ein Terminal oder die Browser-Konsole).
Bereiten Sie den Ordner vor und öffnen Sie die Schlüsseldatei:
bash mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keysFügen Sie den öffentlichen Schlüssel in eine eigene Zeile ein (in PuTTY mit Rechtsklick). Der ganze Schlüssel muss in einer Zeile stehen:
ssh-ed25519 AAAA… kommentar.Speichern Sie (Strg+O, Eingabe) und schließen Sie den Editor (Strg+X).
Setzen Sie die Berechtigungen:
bash chmod 600 ~/.ssh/authorized_keys
Anmeldung mit dem Schlüssel#
Der SSH-Client findet einen Schlüssel am Standardort (id_ed25519) von selbst, der übliche Befehl reicht also:
ssh [email protected]Wenn Sie ein Passwort für den Schlüssel gesetzt haben, fragt der Client Enter passphrase for key. Sie geben das Schlüssel-Passwort ein, nicht das Root-Passwort.
Einen Schlüssel an einem anderen Ort oder mit anderem Namen geben Sie mit der Option -i an:
ssh -i ~/.ssh/vps_klic [email protected]-i ~/.ssh/vps_klic– der Pfad zum privaten Schlüssel (die Datei ohne.pub).
PuTTY:
- Starten Sie PuTTY und laden Sie die gespeicherte Sitzung (Load) oder tragen Sie die IP-Adresse ein.
- Öffnen Sie im Baum links Connection › SSH › Auth › Credentials.
- Klicken Sie neben dem Feld Private key file for authentication auf Browse und wählen Sie die
.ppk-Datei. - Optional: Tragen Sie unter Connection › Data bei Auto-login username
rootein. - Gehen Sie zurück zu Session, klicken Sie auf den Sitzungsnamen und Save, damit Sie das beim nächsten Mal nicht erneut einrichten müssen.
- Klicken Sie auf Open.
Einen Schlüssel aus ssh-keygen können Sie auch in PuTTY verwenden: Klicken Sie in PuTTYgen auf Load, wählen Sie die Datei id_ed25519 (Dateifilter auf All Files umstellen) und speichern Sie sie mit Save private key als .ppk. Umgekehrt wandeln Sie einen PuTTYgen-Schlüssel mit Conversions › Export OpenSSH key in das OpenSSH-Format um.
ssh-agent: Schlüsselpasswort nur einmal eingeben#
ssh-agent merkt sich den entsperrten Schlüssel, sodass Sie das Schlüsselpasswort nicht bei jeder Verbindung eingeben.
Windows
Schalten Sie in einer als Administrator ausgeführten PowerShell den Agent-Dienst ein (er ist standardmäßig aus):
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agentSet-Service -StartupType Automatic– der Agent startet mit dem System.Start-Service ssh-agent– startet den Agent jetzt.
Fügen Sie den Schlüssel dann in einem normalen Fenster hinzu (es fragt nach dem Schlüsselpasswort):
ssh-add $env:USERPROFILE\.ssh\id_ed25519macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519--apple-use-keychain– speichert das Schlüsselpasswort im macOS-Schlüsselbund.
Damit SSH das Passwort auch nach einem Neustart des Mac automatisch aus dem Schlüsselbund verwendet, fügen Sie dies am Anfang der Datei ~/.ssh/config hinzu (siehe nächster Abschnitt):
Host *
UseKeychain yes
AddKeysToAgent yesUseKeychain yes– das Schlüsselpasswort wird aus dem Schlüsselbund geladen (nur macOS).AddKeysToAgent yes– der entsperrte Schlüssel wird bei der ersten Verwendung dem Agent hinzugefügt.
Linux
Die meisten Desktop-Umgebungen starten den Agent von selbst. Fügen Sie den Schlüssel hinzu mit:
ssh-add ~/.ssh/id_ed25519Zur Prüfung: ssh-add -l listet die Fingerabdrücke der im Agent geladenen Schlüssel auf.
Die Datei ~/.ssh/config: Verbindung mit einem Wort#
Speichern Sie die Einstellungen Ihres VPS in der Datei config im Ordner .ssh (Windows: C:\, ohne Endung):
Host mojevps
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes| Direktive | Was sie tut |
|---|---|
Host mojevps | Das Kürzel, das Sie statt der Adresse tippen. Gilt für die Zeilen darunter. |
HostName | Die echte IP-Adresse oder Domain des VPS. |
User | Der Benutzer, als der Sie sich anmelden. |
Port | Der SSH-Port. Ändern Sie ihn, wenn Sie SSH auf einen anderen Port verschoben haben. |
IdentityFile | Der private Schlüssel für diesen VPS. |
IdentitiesOnly yes | Nur den Schlüssel aus IdentityFile probieren, nicht alle Schlüssel aus dem Agent. Verhindert den Fehler Too many authentication failures. |
Dann verbinden Sie sich mit ssh mojevps. Auch scp und sftp verwenden das Kürzel.
Passwortanmeldung ausschalten#
Solange die Passwortanmeldung eingeschaltet ist, können Bots sie weiter probieren. Ist sie aus, akzeptiert der VPS nur noch einen Schlüssel.
Was das Ausschalten von Passwörtern im Kundenbereich betrifft
Die Registerkarten Dateien und Datenbank melden sich am VPS mit einem Passwort an. Sobald Passwörter aus sind, funktionieren sie nicht mehr. Übertragen Sie Dateien dann mit einem SFTP-Client per Schlüssel (sowohl WinSCP als auch FileZilla unterstützen Schlüssel) und verwalten Sie die Datenbank über einen SSH-Tunnel. Die Browser-Konsole funktioniert weiterhin. Eine Übersicht aller Auswirkungen steht in der Anleitung Einen neuen VPS absichern.
Prüfen Sie zuerst, dass die Schlüsselanmeldung funktioniert
Wenn Sie Passwörter ausschalten und der Schlüssel nicht funktioniert, können Sie sich nicht mehr per SSH anmelden. Öffnen Sie, bevor Sie fortfahren, ein neues Fenster und melden Sie sich mit dem Schlüssel an, ohne das Root-Passwort einzugeben. Lassen Sie das ursprüngliche Fenster die ganze Zeit offen. Geht trotzdem etwas schief, melden Sie sich über die Browser-Konsole mit dem Root-Passwort an und löschen Sie die Datei aus Schritt 1.
Erstellen (oder öffnen) Sie Ihre eigene Konfigurationsdatei des SSH-Servers:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confFügen Sie die Einstellungen ein:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-passwordWenn die Datei bereits
PermitRootLogin noenthält (aus der Anleitung Einen neuen VPS absichern), lassen Sie die letzte Zeile weg.Einstellung Was sie tut Empfohlener Wert Wann ändern PasswordAuthenticationErlaubt die Passwortanmeldung. noNie, wenn Passwörter aus sein sollen. KbdInteractiveAuthenticationEine weitere Art der Passworteingabe (eine interaktive Abfrage). Auch bei ausgeschaltetem PasswordAuthenticationkönnte darüber ein Passwort eingegeben werden.noyesnur für Zwei-Faktor-Authentifizierung über PAM (fortgeschritten).PubkeyAuthenticationErlaubt die Schlüsselanmeldung. Der Standardwert ist yes; wir führen ihn sicherheitshalber auf.yesNie. PermitRootLoginRoot-Anmeldung. prohibit-password= root nur mit Schlüssel.prohibit-passwordno, wenn Sie unter Ihrem eigenen Benutzer mitsudoarbeiten.Speichern und schließen Sie den Editor.
Prüfen Sie, dass genau Ihre Werte gelten:
bash sshd -t && sshd -T | grep -Ei "^(passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|permitrootlogin)"sshd -t– prüft die Syntax der Konfiguration. Bei einem Fehler gibt es Datei und Zeile aus, und der nächste Befehl läuft nicht.sshd -T– gibt die resultierende wirksame Konfiguration nach dem Laden aller Dateien aus.grep -Ei "…"– wählt nur die vier Einstellungen aus, die Sie prüfen.
Die Ausgabe muss diese vier Zeilen enthalten (die Reihenfolge kann abweichen):
Ausgabetext permitrootlogin without-password pubkeyauthentication yes passwordauthentication no kbdinteractiveauthentication nowithout-passwordist der ältere Name fürprohibit-passwordund bedeutet dasselbe. Ubuntu 24.04 und Debian 13 geben den älteren Namen aus; neuere OpenSSH-Versionen gebenprohibit-passwordaus. Haben Sienogesetzt, sehen Siepermitrootlogin no.Zeigt eine Zeile einen anderen Wert (typischerweise
passwordauthentication yes), steht dieselbe Einstellung in einer Datei, die früher geladen wird. Finden Sie sie mitgrep -rni "passwordauthentication" /etc/ssh/sshd_config.d/. Kommentieren Sie die Zeile dort mit einem#am Anfang aus und wiederholen Sie die Prüfung.Starten Sie den SSH-Server neu:
bash systemctl restart sshDie aktuelle Verbindung bleibt offen.
Versuchen Sie in einem neuen Fenster, eine Passwortanmeldung zu erzwingen:
bash ssh -o PubkeyAuthentication=no [email protected]Der Server muss
Permission denied (publickey).antworten. Das ist richtig: Er akzeptiert keine Passwörter mehr.Melden Sie sich in einem weiteren Fenster normal mit dem Schlüssel an (
ssh [email protected]). Erst wenn das funktioniert, schließen Sie das ursprüngliche Fenster.
Warum die Datei 00-zabezpeceni.conf
Der SSH-Server liest zuerst die Dateien im Ordner /etc/ssh/sshd_config.d/ (in alphabetischer Reihenfolge) und dann die Hauptdatei /etc/ssh/sshd_config. Für jede Einstellung gilt der erste gefundene Wert. Auf dem VPS kann es eine Datei wie 50-cloud-init.conf mit PasswordAuthentication yes geben. Dank der Nummer 00 wird Ihre Datei zuerst geladen, und ihre Werte gewinnen. Die Prüfung mit sshd -T bestätigt Ihnen das immer.
Mehrere Computer, Entfernen und Sichern eines Schlüssels#
- Ein weiterer Computer: Erstellen Sie für ihn einen eigenen Schlüssel mit anderer Kennung und laden Sie ihn auf dieselbe Weise hoch. Jeder Schlüssel steht in einer eigenen Zeile in
~/.ssh/authorized_keys. Einen privaten Schlüssel zwischen Computern zu kopieren empfehlen wir nicht. - Einen Schlüssel entfernen (verlorener Laptop, ausscheidender Kollege): Öffnen Sie
nano ~/.ssh/authorized_keysund löschen Sie die Zeile mit seiner Kennung. Es wirkt sofort. - Sicherung: Bewahren Sie den privaten Schlüssel in einem Passwort-Manager oder auf verschlüsseltem Speicher auf. Wenn Sie ihn verlieren und Passwörter ausgeschaltet haben, melden Sie sich über die Browser-Konsole an und laden Sie einen neuen öffentlichen Schlüssel hoch.
- Ein anderer Benutzer als root: Der Schlüssel gehört in
/home/, und dieser Benutzer muss Besitzer der Datei sein.<BENUTZER>/ .ssh/ authorized_ keys
Überprüfung#
ssh root@<VPS_IP_ADRESSE>meldet Sie ohne Root-Passwort an (höchstens fragt es nach dem Schlüsselpasswort).ssh -o PubkeyAuthentication=no root@<VPS_IP_ADRESSE>endet mitPermission denied (publickey).sshd -Tzeigtpasswordauthentication no.
Fehlerbehebung#
Der VPS fragt weiterhin nach dem Root-Passwort#
Der Schlüssel wurde nicht verwendet. Verbinden Sie sich mit ausführlicher Ausgabe:
ssh -v [email protected]-v– ausführliche Ausgabe. Suchen Sie die ZeilenOffering public key(der Client hat den Schlüssel angeboten) undServer accepts key(der Server hat ihn akzeptiert).
Bietet der Client den Schlüssel nicht an, liegt er in einer anderen Datei: Verwenden Sie -i oder IdentityFile. Akzeptiert der Server ihn nicht, prüfen Sie die Berechtigungen auf dem VPS:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
journalctl -u ssh -n 30journalctl -u ssh -n 30– die letzten 30 Einträge des SSH-Servers. Die MeldungAuthentication refused: bad ownership or modesbedeutet falsche Berechtigungen oder einen falschen Besitzer des Ordners.ssh.
Prüfen Sie auch, dass der Schlüssel in authorized_keys in einer Zeile steht und mit ssh-ed25519 beginnt.
Permission denied (publickey).#
Passwörter sind aus, und der Server hat den Schlüssel nicht akzeptiert. Gehen Sie wie im vorherigen Punkt vor. Wenn Sie sich gar nicht anmelden können, verwenden Sie die Browser-Konsole.
Windows: WARNING: UNPROTECTED PRIVATE KEY FILE! oder Bad permissions#
Auch andere Benutzer des Computers haben Zugriff auf den privaten Schlüssel (typischerweise nach dem Kopieren von woanders), und der Client weigert sich, ihn zu verwenden. Setzen Sie die Berechtigungen in PowerShell:
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r
icacls $env:USERPROFILE\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"/inheritance:r– entfernt die vom Ordner geerbten Berechtigungen./grant:r "<BENUTZER>:(R)"– gibt nur Ihrem Konto Leseberechtigung.
Unter macOS und Linux beheben Sie denselben Fehler mit chmod 600 ~/.ssh/id_ed25519.
Load key "…": invalid format#
Sie versuchen, einen Schlüssel im PuTTY-Format (.ppk) mit OpenSSH zu verwenden. Wandeln Sie ihn in PuTTYgen mit Conversions › Export OpenSSH key um.
PuTTY: Server refused our key#
Der richtige öffentliche Schlüssel ist nicht auf dem VPS. Kopieren Sie den Text aus dem Feld Public key for pasting into OpenSSH authorized_keys file erneut (nicht die Datei aus Save public key) und fügen Sie ihn in einer Zeile in ~/.ssh/authorized_keys ein.
Too many authentication failures#
Der Agent bietet zu viele Schlüssel an. Verwenden Sie IdentitiesOnly yes in ~/.ssh/config oder die Optionen -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes.
Zusammenfassung
- Der private Schlüssel bleibt nur auf Ihrem Computer; der öffentliche gehört in
~/.ssh/authorized_keysauf dem VPS. - Erstellen Sie den Schlüssel mit
ssh-keygen -t ed25519 -C "kommentar"oder in PuTTYgen (EdDSA, Ed25519). - Hochladen:
ssh-copy-id(macOS, Linux), unter Windowstype … | ssh …, oder von Hand. - Schalten Sie Passwörter mit der Datei
/etc/aus und prüfen Sie das Ergebnis mitssh/ sshd_ config. d/ 00-zabezpeceni. conf sshd -T. - Testen Sie die Schlüsselanmeldung immer in einem neuen Fenster, bevor Sie das ursprüngliche schließen.
- Das Ausschalten von Passwörtern deaktiviert auch die Registerkarten Dateien und Datenbank; die Konsole funktioniert weiter.