Stellen Sie sich vor, Sie möchten sich via SSH mit Ihrem Windows-Server verbinden, aber nichts funktioniert mehr. Der SSH-Dienst startet nicht, oder Ihre Clients melden plötzlich eine beängstigende Warnung: „REMOTE HOST IDENTIFICATION HAS CHANGED!“ Ein schneller Blick auf C:ProgramDatassh zeigt das Schlimmste: Der Ordner ist leer! Alle Ihre SSH Host Keys sind verschwunden. In diesem Moment macht sich schnell Panik breit. Doch atmen Sie tief durch – diese Situation ist zwar ärgerlich, aber keineswegs das Ende der Welt. In diesem umfassenden Leitfaden zeige ich Ihnen Schritt für Schritt, wie Sie dieses Problem beheben und Ihren SSH-Dienst auf Windows schnell wieder zum Laufen bringen. Keine Sorge, Sie sind nicht allein, und die Lösung ist einfacher, als Sie vielleicht denken.
Was sind SSH Host Keys und warum sind sie so wichtig?
Bevor wir uns in die Rettung stürzen, lassen Sie uns kurz klären, was SSH Host Keys eigentlich sind und warum ihr Verlust so gravierend ist. Im Wesentlichen dienen SSH Host Keys als digitale Identität Ihres Servers. Wenn ein SSH-Client versucht, sich mit Ihrem Server zu verbinden, präsentiert der Server seinen öffentlichen Host Key. Der Client vergleicht diesen mit einem zuvor gespeicherten Schlüssel (in der Datei known_hosts
), um sicherzustellen, dass er tatsächlich mit dem beabsichtigten Server spricht und nicht mit einem Angreifer, der sich als Ihr Server ausgibt (ein sogenannter Man-in-the-Middle-Angriff).
Es gibt verschiedene Arten von Host Keys, die gebräuchlichsten sind RSA, ECDSA und ED25519. Jeder dieser Schlüssel besteht aus einem privaten und einem öffentlichen Teil. Der private Schlüssel verbleibt sicher auf Ihrem Server (in C:ProgramDatassh), während der öffentliche Teil an Clients gesendet wird.
Wenn diese Schlüssel fehlen, gibt es mehrere Probleme:
- Der OpenSSH Server-Dienst (
sshd
) kann nicht starten, da er keine Identität hat. - Selbst wenn er irgendwie starten sollte, würden Clients eine Warnung erhalten, da sie keinen passenden Schlüssel finden oder einen völlig neuen, unbekannten Schlüssel präsentiert bekommen. Dies führt zur Fehlermeldung: „WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!“.
- Ohne diese Schlüssel fehlt die Grundlage für die sichere Serverauthentifizierung, was die Integrität Ihrer SSH-Verbindungen massiv gefährdet.
Die Katastrophe ist eingetreten: C:ProgramDatassh ist leer!
Der Ordner C:ProgramDatassh ist der Standardort unter Windows, an dem der OpenSSH Server seine Host Keys und die Konfigurationsdatei sshd_config
speichert. Wenn dieser Ordner leer ist, deutet das darauf hin, dass die essenziellen Identitätsdateien Ihres Servers gelöscht, verschoben oder beschädigt wurden. Dies kann durch verschiedene Szenarien geschehen:
- Versehentliches Löschen: Manchmal werden Dateien oder Ordner irrtümlich entfernt.
- Disk-Korruption: Ein Fehler im Dateisystem kann zum Verlust von Daten führen.
- Fehlgeschlagene Installation/Update: Bei einem Problem während der Installation oder Aktualisierung des OpenSSH-Servers können die Schlüssel nicht korrekt generiert oder überschrieben worden sein.
- Manuelle Aufräumarbeiten: Jemand hat den Ordner gelöscht, um „Platz zu schaffen”, ohne die Konsequenzen zu bedenken.
Egal, wie es passiert ist, das Ergebnis ist dasselbe: Ihr SSH-Server kann nicht ordnungsgemäß funktionieren. Aber keine Sorge, die Lösung ist da!
Keine Panik: Der Plan zur Wiederherstellung
Die gute Nachricht ist: Host Keys können neu generiert werden. Da sie zur Authentifizierung des *Servers* dienen und nicht zur Authentifizierung von *Benutzern* (dafür sind die Public Keys in .ssh/authorized_keys
zuständig), ist der Verlust zwar ärgerlich, aber die Wiederherstellung ist vergleichsweise unkompliziert. Hier ist unser Schritt-für-Schritt-Plan:
- Überprüfen des Status und der Fehlermeldungen.
- Generieren neuer SSH Host Keys.
- Überprüfen und Anpassen der
sshd_config
. - Den SSH-Dienst neu starten.
- Umgang mit Client-Verbindungen und der
known_hosts
-Datei. - Präventive Maßnahmen ergreifen, um eine Wiederholung zu vermeiden.
Schritt 1: Überprüfen des Status und der Fehlermeldungen
Bevor wir blind handeln, verschaffen wir uns einen Überblick über die aktuelle Situation. Öffnen Sie eine PowerShell oder Eingabeaufforderung mit Administratorrechten.
Überprüfen Sie den Status des SSH-Dienstes:
Get-Service sshd
Wahrscheinlich wird der Dienst nicht ausgeführt oder sich im Zustand „Stopped” befinden. Versuchen Sie, ihn zu starten:
Start-Service sshd
Wenn der Ordner C:ProgramDatassh leer ist, wird dieser Befehl höchstwahrscheinlich mit einem Fehler enden, z.B. „Failed to start service ‘OpenSSH SSH Server’ (sshd)”.
Der nächste und wichtigste Schritt zur Diagnose ist der Event Viewer (Ereignisanzeige). Drücken Sie Win + R
, geben Sie eventvwr.msc
ein und drücken Sie Enter. Navigieren Sie zu Windows-Protokolle > Anwendung oder System. Suchen Sie nach Einträgen, die von „sshd” oder „OpenSSH SSH Server” stammen. Sie werden wahrscheinlich Meldungen finden, die besagen, dass der Dienst keine Host Keys laden konnte, z.B.:
sshd: fatal: No HostKeys configured.
Diese Meldungen bestätigen das Problem: Die Identität Ihres Servers fehlt.
Schritt 2: Generieren neuer SSH Host Keys (Die Lösung!)
Dies ist der Kern der Lösung. Der OpenSSH Server für Windows wird mit einem Dienstprogramm namens ssh-keygen.exe
geliefert, das genau für diesen Zweck entwickelt wurde.
Stellen Sie sicher, dass Sie eine PowerShell oder Eingabeaufforderung mit Administratorrechten geöffnet haben.
Navigieren Sie zum Installationsverzeichnis von OpenSSH, das sich normalerweise unter C:WindowsSystem32OpenSSH
befindet, oder stellen Sie sicher, dass dieser Pfad in Ihrer System-PATH-Umgebungsvariablen enthalten ist. Meistens ist es einfacher, direkt im Verzeichnis zu arbeiten:
cd C:WindowsSystem32OpenSSH
Führen Sie den folgenden Befehl aus, um alle Standard-Host Key-Typen zu generieren:
.ssh-keygen.exe -A
Der Parameter -A
steht für „all” und weist ssh-keygen
an, alle vom OpenSSH-Server unterstützten Host Key-Typen zu generieren. Dazu gehören in der Regel:
ssh_host_rsa_key
undssh_host_rsa_key.pub
ssh_host_ecdsa_key
undssh_host_ecdsa_key.pub
ssh_host_ed25519_key
undssh_host_ed25519_key.pub
Diese Dateien werden standardmäßig im Ordner C:ProgramDatassh abgelegt. Wenn der Ordner zuvor leer war, werden diese Dateien nun dort erstellt. Sie sollten eine Ausgabe sehen, die etwa so aussieht:
ssh-keygen: generating new host keys: RSA ECDSA ED25519
C:ProgramDatasshssh_host_rsa_key already exists.
C:ProgramDatasshssh_host_ecdsa_key already exists.
C:ProgramDatasshssh_host_ed25519_key already exists.
Die Meldung „already exists” ist hier in Ordnung, da wir ja wollen, dass sie erstellt werden. Wenn der Ordner komplett leer war, würden diese Meldungen nicht erscheinen, stattdessen würde angezeigt, dass sie generiert wurden.
Wichtiger Hinweis zu Berechtigungen:
Das ssh-keygen -A
-Kommando sollte die richtigen Berechtigungen für die generierten Schlüssel automatisch einstellen. Dies ist entscheidend für die Sicherheit und Funktion des SSH-Servers. Der private Schlüssel darf nur vom SYSTEM-Konto (unter dem der SSH-Dienst läuft) und von Administratoren lesbar sein. Wenn Sie unsicher sind oder Probleme auftreten, können Sie die Berechtigungen manuell überprüfen und korrigieren:
icacls "C:ProgramDatassh" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
icacls "C:ProgramDatassh*" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
icacls "C:ProgramDatassh*.pub" /inheritance:r /grant "Users:R" /grant "Administrators:F" /grant "SYSTEM:F"
Der erste Befehl setzt die Berechtigungen für den Ordner selbst. Der zweite für alle Dateien darin. Der dritte gibt explizit auch normalen Benutzern Leserechte für die öffentlichen Schlüssel, was für manche Szenarien nützlich sein kann, aber für die reibungslose Funktion des SSH-Servers selbst nicht zwingend notwendig ist. Die entscheidenden Rechte sind die für SYSTEM und Administratoren.
Schritt 3: Überprüfen und Anpassen der sshd_config
Der nächste Schritt ist die Überprüfung der Konfigurationsdatei des SSH-Servers, sshd_config
. Diese Datei befindet sich ebenfalls in C:ProgramDatassh. Wenn der Ordner leer war, ist es möglich, dass diese Datei ebenfalls fehlt.
Wenn sshd_config
fehlt, finden Sie eine Standardvorlage unter C:ProgramDatasshsshd_config.default
. Kopieren Sie diese als sshd_config
in den Ordner C:ProgramDatassh:
Copy-Item C:ProgramDatasshsshd_config.default C:ProgramDatasshsshd_config
Öffnen Sie die Datei C:ProgramDatasshsshd_config
mit einem Texteditor (z.B. Notepad oder VS Code) mit Administratorrechten.
Stellen Sie sicher, dass die folgenden Zeilen entweder vorhanden und nicht auskommentiert sind oder entsprechend hinzugefügt werden (falls nicht vorhanden):
# HostKey for protocol version 2
HostKey C:ProgramDatasshssh_host_rsa_key
HostKey C:ProgramDatasshssh_host_ecdsa_key
HostKey C:ProgramDatasshssh_host_ed25519_key
Diese Zeilen weisen dem SSH-Server an, welche Host Keys er verwenden soll. Mit ssh-keygen -A
wurden diese Schlüssel generiert, daher ist es wichtig, dass die sshd_config
sie auch kennt.
Überprüfen Sie auch andere wichtige Einstellungen, die für Ihren Server relevant sind, wie zum Beispiel:
Port 22
(oder ein anderer gewünschter Port)ListenAddress 0.0.0.0
(um auf allen Schnittstellen zu lauschen)PasswordAuthentication yes
(wenn Sie die Anmeldung mit Passwörtern erlauben möchten)PubkeyAuthentication yes
(für die Authentifizierung mit SSH-Schlüsselpaaren, empfohlen)Match Group administrators
(um nur Admins SSH-Zugriff zu gewähren, optional)
Speichern Sie die Änderungen in der sshd_config
-Datei. Achten Sie auch hier auf die Berechtigungen: Nur SYSTEM und Administratoren sollten Vollzugriff haben.
Schritt 4: Den SSH-Dienst neu starten
Nachdem die Host Keys generiert und die sshd_config
überprüft und angepasst wurde, ist es an der Zeit, den SSH-Dienst neu zu starten, damit die Änderungen wirksam werden.
Öffnen Sie erneut eine PowerShell oder Eingabeaufforderung mit Administratorrechten und führen Sie aus:
Restart-Service sshd
Überprüfen Sie den Status, um sicherzustellen, dass der Dienst jetzt ausgeführt wird:
Get-Service sshd
Wenn alles gut gegangen ist, sollte der Dienst nun im Zustand „Running” sein. Überprüfen Sie zur Sicherheit auch noch einmal die Ereignisanzeige. Sie sollten nun keine Fehlermeldungen bezüglich fehlender Host Keys mehr sehen. Stattdessen sollten Meldungen auftauchen, die bestätigen, dass der Dienst gestartet wurde und die Host Keys geladen hat.
Schritt 5: Umgang mit Client-Verbindungen (Die „Gefahr” für Clients)
Ihr SSH-Server läuft wieder! Herzlichen Glückwunsch! Jetzt kommt der Teil, der Ihre Clients betrifft. Da Sie neue Host Keys generiert haben, hat Ihr Server eine neue digitale Identität. Wenn Ihre Clients versuchen, sich zu verbinden, werden sie die Meldung sehen:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Dies ist eine Sicherheitswarnung, die anzeigt, dass der vom Server präsentierte öffentliche Schlüssel nicht mit dem übereinstimmt, den der Client zuvor in seiner known_hosts
-Datei gespeichert hat. Es ist ein notwendiger Schutzmechanismus, der in normalen Situationen auf einen potenziellen Man-in-the-Middle-Angriff hindeuten könnte.
In Ihrem Fall wissen Sie jedoch, dass Sie die Host Keys absichtlich geändert haben. Daher müssen Sie Ihre Clients anweisen, den alten, ungültigen Schlüssel zu vergessen und den neuen zu akzeptieren.
Auf den meisten SSH-Clients (Linux, macOS, Windows mit OpenSSH-Client) befindet sich die Datei known_hosts
im Verzeichnis ~/.ssh/
(also C:Users.sshknown_hosts
unter Windows).
So aktualisieren Sie die known_hosts-Datei:
-
Manuelles Bearbeiten: Öffnen Sie die Datei
known_hosts
mit einem Texteditor. Suchen Sie die Zeile, die zu Ihrem Server (Anhand des Hostnamens oder der IP-Adresse) gehört, und löschen Sie diese Zeile vollständig. Speichern Sie die Datei. -
Mit
ssh-keygen
: Eine sicherere Methode ist die Verwendung desssh-keygen
-Befehls auf dem Client. Öffnen Sie ein Terminal oder eine PowerShell und führen Sie aus:ssh-keygen -R <Hostname_oder_IP_Ihres_Servers>
Ersetzen Sie
<Hostname_oder_IP_Ihres_Servers>
durch den tatsächlichen Hostnamen oder die IP-Adresse, mit der Sie sich verbinden. Dieser Befehl entfernt den Eintrag für diesen Server automatisch aus Ihrerknown_hosts
-Datei.
Nachdem Sie den alten Eintrag entfernt haben, versuchen Sie erneut, sich mit Ihrem Server zu verbinden. Der Client wird Sie fragen, ob Sie den neuen Host Key akzeptieren möchten. Überprüfen Sie den Fingerabdruck des Schlüssels (falls Sie ihn irgendwo dokumentiert haben oder vom Server abrufen können), und wenn alles in Ordnung ist, geben Sie „yes” ein, um den neuen Schlüssel in Ihrer known_hosts
-Datei zu speichern. Ihre Verbindung sollte nun wieder wie gewohnt hergestellt werden.
Prävention ist alles: Wie Sie eine Wiederholung vermeiden
Die Wiederherstellung war erfolgreich, aber niemand möchte diesen Prozess wiederholen müssen. Hier sind einige bewährte Methoden, um den Verlust von SSH Host Keys in Zukunft zu verhindern:
- Regelmäßige Backups: Dies ist die wichtigste Maßnahme. Sichern Sie den gesamten Ordner C:ProgramDatassh regelmäßig. Kopieren Sie ihn einfach an einen sicheren Ort (auf eine andere Partition, ein Netzlaufwerk oder in die Cloud). Im Falle eines Verlusts können Sie die Dateien einfach zurückkopieren.
-
Dokumentation: Führen Sie eine Dokumentation Ihrer Serverkonfigurationen. Notieren Sie sich wichtige Einstellungen in der
sshd_config
und idealerweise auch die Fingerabdrücke Ihrer Host Keys. Diese können Sie mitssh-keygen -l -f C:ProgramDatasshssh_host_rsa_key.pub
abrufen. - Berechtigungen überprüfen: Überprüfen Sie in regelmäßigen Abständen die Dateiberechtigungen für den Ordner C:ProgramDatassh und die darin enthaltenen Dateien. Nur das SYSTEM-Konto und Administratoren sollten Vollzugriff haben. Falsche Berechtigungen können nicht nur Sicherheitsrisiken darstellen, sondern auch zu Funktionsstörungen führen.
- Überwachung der System-Logs: Behalten Sie die Ereignisanzeige und die SSH-Logs im Auge. Auffällige Fehlermeldungen können auf Probleme hinweisen, bevor sie kritisch werden.
-
Versionskontrolle für Konfigurationsdateien: Für fortgeschrittene Benutzer kann es sinnvoll sein, die
sshd_config
-Datei unter Versionskontrolle zu stellen (z.B. mit Git), um Änderungen nachvollziehbar zu machen und bei Bedarf auf frühere Versionen zurückgreifen zu können.
Fazit
Der Verlust Ihrer SSH Host Keys und ein leerer Ordner C:ProgramDatassh auf Ihrem Windows-Server kann im ersten Moment einen Schock auslösen. Doch wie Sie gesehen haben, ist dies ein lösbares Problem, das mit den richtigen Schritten schnell behoben werden kann. Die Hauptlösung besteht darin, neue Schlüssel mit ssh-keygen -A
zu generieren, die Konfiguration anzupassen und den Dienst neu zu starten.
Wichtiger als die schnelle Fehlerbehebung ist jedoch die Prävention. Durch regelmäßige Backups und eine sorgfältige Verwaltung Ihrer Konfigurationen können Sie sicherstellen, dass Sie nie wieder in diese unangenehme Lage geraten. SSH ist ein mächtiges Tool für die sichere Fernverwaltung, und mit einem guten Verständnis seiner Komponenten sind Sie bestens gerüstet, um eventuelle Probleme schnell und effektiv zu lösen.