Das Secure Shell (SSH)-Protokoll und das OpenSSH-Projekt gibt es seit Jahrzehnten unter Linux. Allerdings wurde OpenSSH auf Windows erst kürzlich in der Windows-Welt angenommen. Daher wird ein Windows Server normalerweise nicht vorkonfiguriert geliefert und erfordert einige Einrichtungsschritte.
In diesem Tutorial erfahren Sie, wie Sie genauso einfach wie unter Linux eine SSH-Verbindung zu Ihrem Windows Server herstellen können. Sie lernen, wie Sie OpenSSH auf Windows installieren (oder aktualisieren), geeignete Firewall-Regeln hinzufügen und die Authentifizierung mittels öffentlichem Schlüssel, Passwort und Zertifikat konfigurieren.
Voraussetzungen
Um den Beispielen und Demonstrationen in diesem Artikel effektiv folgen zu können, müssen Sie die folgenden Anforderungen erfüllen.
- A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
- A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.
OpenSSH herunterladen
Im Gegensatz zu Linux-Servern läuft auf Windows-Servern kein SSH-Server von Haus aus. Aber Microsoft hat eine Open-Source-Portierung von OpenSSH für Windows veröffentlicht. Mit dieser Version können Sie nun einen SSH-Server auf einem Windows-Rechner einrichten.
Um loszulegen, müssen Sie zuerst OpenSSH herunterladen. Befolgen Sie dazu die folgenden Schritte:
- Verbinden Sie sich über Remote Desktop (RDP) oder Ihren bevorzugten Desktop-Manager-Client mit dem Desktop auf einem Windows Server.
2. Auf Ihrem Windows Server-Desktop, öffnen Sie eine erweiterte Windows PowerShell Konsole.
3. Kopieren Sie anschließend den untenstehenden Code, fügen Sie ihn in das PowerShell-Fenster ein und drücken Sie Enter. Dieses Skript lädt die neueste OpenSSH-Version herunter, die zum Zeitpunkt der Veröffentlichung v8.1.0.0p1-Beta ist, in das aktuelle Arbeitsverzeichnis.
Wenn Sie den PowerShell-Code zum Herunterladen von OpenSSH speichern möchten, können Sie auch einen Code-Editor wie Windows PowerShell ISE oder Visual Studio Code öffnen und ihn dort speichern.
4. Die OpenSSH-Win64.zip Datei sollte nun in Ihrem aktuellen Arbeitsverzeichnis sein. Überprüfen Sie dies, indem Sie den untenstehenden Befehl ausführen.
Wie Sie unten sehen können, existiert die OpenSSH-Win64.zip Datei im Verzeichnis.

Installation von OpenSSH
Nachdem Sie OpenSSH-Win64.zip heruntergeladen haben, ist der nächste Schritt die Installation von OpenSSH auf dem Server. Es gibt keinen Installationsassistenten, falls Sie einen erwarten.
- Während sich die gleiche PowerShell-Sitzung noch immer aktiv ist, kopieren Sie den unten stehenden Code und führen Sie ihn in PowerShell aus. Dieser Code extrahiert den Inhalt der Datei OpenSSH-Win64.zip in das Verzeichnis C:\Program Files\OpenSSH.
2. Führen Sie nach dem Extrahieren der ZIP-Datei den folgenden Befehl in PowerShell aus, um das Skript C:\Program Files\OpenSSH\install-sshd.ps1 auszuführen. Dieses Skript installiert den OpenSSH SSH-Server-Dienst (sshd) und den OpenSSH Authentication Agent-Dienst (sshd-agent).
Das erwartete Ergebnis können Sie unten sehen.

Um sicherzustellen, dass der SSH-Server automatisch startet, führen Sie den folgenden Befehl in PowerShell aus.
Hinzufügen einer Windows-Firewall-Regel, um SSH-Verkehr zuzulassen
Dieses Verfahren ist nur anwendbar, wenn Ihr Windows-Server die Windows-Firewall verwendet. Für Server, die Firewalls von Drittanbietern verwenden, beachten Sie die Dokumentation Ihrer Firewall, um den Port 22 zuzulassen.
Die Installation von OpenSSH erstellt automatisch keine Firewall-Ausnahmeregel, um den SSH-Verkehr zu ermöglichen. Ihre nächste Aufgabe besteht daher darin, die Firewall-Regel manuell zu erstellen.
Eine der einfachsten Möglichkeiten, eine neue Windows-Firewall-Regel zu erstellen, besteht darin, PowerShell und das New-NetFirewallRule
-Cmdlet zu verwenden. Der folgende Befehl erstellt eine Firewall-Regel mit dem Namen „Allow SSH“, die eingehenden TCP-Verkehr auf Port 22 zulässt.
Kopieren Sie den folgenden Befehl und führen Sie ihn in PowerShell aus.
Auf dem folgenden Screenshot ist die erwartete Ausgabe in PowerShell nach Erstellung der Firewall-Regel zu sehen.

Verbindung mit SSH über die Passwortauthentifizierung
Jetzt haben Sie OpenSSH auf Windows installiert und die anfängliche Serverkonfiguration durchgeführt. Der nächste Schritt besteht darin, zu überprüfen, ob die Verbindung über SSH tatsächlich funktioniert.
Um Ihren neu konfigurierten SSH-Server zu testen, führen Sie jetzt den Befehl ssh
auf Ihrem lokalen Computer aus.
Dieselben Schritte in diesem Abschnitt gelten auch für die Verbindung mit einem Linux-SSH-Server.
1. Öffnen Sie diesmal auf Ihrem lokalen Computer PowerShell.
2. Führen Sie anschließend den folgenden Befehl aus, um den SSH-Anmeldevorgang zu starten. Stellen Sie sicher, dass Sie den Benutzernamen und den Remote-Host Ihres Windows-Servers ändern.
3. Da Sie sich zum ersten Mal mit dem Server verbinden, sehen Sie eine Aufforderung, die besagt, dass die Echtheit des Hosts nicht festgestellt werden kann. Diese Meldung bedeutet, dass Ihr Computer den Remote-Host noch nicht erkennt. Geben Sie yes ein und drücken Sie die Eingabetaste, um fortzufahren.
4. Wenn Sie nach dem Passwort aufgefordert werden, geben Sie Ihr Kontopasswort ein und drücken Sie die Eingabetaste.

5. Nach dem Anmelden, wie Sie im folgenden Screenshot sehen können, gelangen Sie zur Befehlszeile des Remote-Hosts. Angenommen, Sie möchten bestätigen, dass Sie die Sitzung auf dem Remote-Host gestartet haben. Geben Sie dazu hostname
ein und drücken Sie die Eingabetaste. Der Befehl sollte den Namen des Remote-Computers zurückgeben.

Ändern der Standard-Shell für OpenSSH zu PowerShell
Wenn Sie sich zum ersten Mal bei Ihrem Windows SSH-Server anmelden, werden Sie feststellen, dass die Standard-Shell oder Befehlsinterpreter CMD ist. Es ist in Ordnung, CMD als Standard-SSH-Shell zu haben, aber wenn Sie stattdessen PowerShell als Standard-Shell verwenden möchten, befolgen Sie diese Schritte.
Um die Standard-OpenSSH-Shell von CMD in PowerShell zu ändern:
Öffnen Sie zuerst ein erhöhtes PowerShell-Fenster auf Ihrem Windows Server, falls Sie noch keines geöffnet haben.
Erstellen Sie anschließend einen neuen Registrierungszeichenfolgenwert namens DefaultShell im Registrierungsschlüssel HKLM:\SOFTWARE\OpenSSH. Setzen Sie die Daten der DefaultShell-Zeichenfolge auf den Pfad von Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
Der folgende Screenshot zeigt das erwartete Ergebnis des Befehls.

Konfigurieren der Public-Key-Authentifizierung
In den vorherigen Abschnitten haben Sie sich mit einem Benutzernamen und Passwort verbunden. Dies funktioniert, aber eine sicherere Möglichkeit, sich bei einem SSH-Server anzumelden, besteht darin, einen Schlüsselpaar zu verwenden.
Kurz gesagt besteht ein Schlüsselpaar aus zwei Schlüsseln, dem öffentlichen Schlüssel und dem privaten Schlüssel, die einen Satz Sicherheitsanmeldeinformationen bilden, um Ihre Identität zu überprüfen.
Der öffentliche Schlüssel wird auf dem Server gespeichert, während der private Schlüssel auf dem lokalen Computer bleibt. Sie müssen einen privaten Schlüssel wie Ihr Passwort behandeln. Wenn der private Schlüssel kompromittiert ist, kann ihn jeder verwenden, um auf Ihren SSH-Server zuzugreifen.
Vorbereiten der administrators_authorized_keys-Datei
Öffentliche Schlüssel müssen auf dem Server sein. Aber wo? Für OpenSSH unter Windows liest der SSH-Server die öffentlichen Schlüssel aus der Datei C:\ProgramData\ssh\administrators_authorized_keys. Diese Datei existiert jedoch standardmäßig nicht. Sie müssen sie zuerst erstellen.
Befolgen Sie die folgenden Schritte, um die Datei administrators_authorized_keys zu erstellen und die entsprechende Zugriffssteuerungsliste (ACL) festzulegen.
Auf dem Windows Server:
1. Öffnen Sie eine erhöhte Windows PowerShell-Konsole, sofern noch nicht geschehen.
2. Kopieren Sie den unten stehenden Befehl und führen Sie ihn in PowerShell aus. Dieser Befehl erstellt die Datei administrators_authorized_keys mithilfe des New-Item
-Cmdlets.
Sie sollten ein Ergebnis sehen, das dem unten stehenden Screenshot ähnelt.

3. Holen Sie sich als Nächstes die derzeit zugewiesene ACL für die Datei ssh_host_dsa_key und kopieren Sie diese ACL in die administrators_authorized_keys-Datei. Führen Sie dazu den folgenden Befehl aus.
Der OpenSSH-Dienst erfordert, dass nur die Administratorengruppe und das SYSTEM-Konto Zugriff auf die administrators_authorized_keys-Datei haben. Das Kopieren der ACL von ssh_host_dsa_key nach administrators_authorized_keys macht Sinn, da die ACL bereits festgelegt ist.
4. Öffnen Sie nun den Windows Explorer.
5. Navigieren Sie zum Ordner C:\ProgramData\ssh\.
6. Klicken Sie mit der rechten Maustaste auf die Datei administrators_authorized_keys und wählen Sie Eigenschaften.
7. Klicken Sie auf der Eigenschaftsseite auf den Sicherheit-Tab und dann auf Erweitert.

8. Überprüfen Sie dann, ob die Berechtigungen wie im untenstehenden Bild angezeigt werden.

Generieren eines neuen SSH-Schlüsselpaars
Um ein neues SSH-Schlüsselpaar zu generieren, verwenden Sie den Befehl ssh-keygen
, der Teil der OpenSSH-Client-Tools ist, die in Windows 10 (und höher) und den meisten Linux-Betriebssystemen integriert sind.
Das in diesem Abschnitt gezeigte Beispiel funktioniert auf Windows- und Linux-Computern.
Auf Ihrem lokalen Computer, in einer PowerShell-Konsole:
1. Navigieren Sie zum Verzeichnis .ssh Ihres Benutzerordners, indem Sie den folgenden Befehl ausführen.
2. Geben Sie als nächstes den Befehl ssh-keygen
ein und drücken Sie die Eingabetaste. Wenn Sie aufgefordert werden, einen Dateispeicherort zum Speichern des generierten Schlüssels einzugeben, verwenden Sie den Standardspeicherort und drücken Sie die Eingabetaste. Dadurch kann Ihr SSH-Client Ihre SSH-Schlüssel automatisch finden.
Unter Windows befindet sich die Standard-Schlüsseldatei unter C:\Benutzer\<Benutzername>\.ssh\id_rsa.
3. Lassen Sie die Passphrase bei der nächsten Aufforderung leer. Zu diesem Zeitpunkt müssen Sie für Tests keine Passphrase verwenden.
Das Hinzufügen einer Passphrase zu Ihrem privaten Schlüssel erhöht die Sicherheit erheblich. Eine Passphrase fungiert als Zwei-Faktor-Authentifizierung (2FA) für Ihren privaten Schlüssel.
Sie werden feststellen, dass der Befehl zwei Dateien erstellt hat: id_rsa (privater Schlüssel) und id_rsa.pub (öffentlicher Schlüssel).

Den öffentlichen Schlüssel auf den Windows SSH-Server übertragen
Nachdem Sie Ihr privates öffentliches Schlüsselpaar generiert haben, ist Ihr nächster Schritt, den öffentlichen Schlüssel in die Datei C:\ProgramData\ssh\administrators_authorized_keys auf dem SSH-Server zu kopieren.
Auf Ihrem lokalen Computer in einer PowerShell-Konsole:
1. Kopieren Sie den unten stehenden Code und führen Sie ihn in PowerShell aus. Stellen Sie sicher, dass Sie zuerst den Benutzernamen und die IP-Adresse ändern. Sie können sich auf den Kommentar über jedem Befehl beziehen, um zu erfahren, was jeder Befehl bewirkt.
2. Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden, und ssh wird mit dem Kopieren des öffentlichen Schlüssels fortfahren. Sie sehen ein ähnliches Ergebnis, wie unten gezeigt.

Mit SSH und Public-Key-Authentifizierung verbinden
Jetzt, da Sie Ihren öffentlichen Schlüssel auf Ihren SSH-Server kopiert haben, müssen Sie kein Passwort mehr zur Authentifizierung verwenden. Wie unten zu sehen ist, wird ssh nicht nach einem Passwort gefragt.

Konfigurieren der Zertifikat-Authentifizierung
Wie bei der Public-Key-Authentifizierung ist die Zertifikat-Authentifizierung passwortlos oder durch ein Passwort geschützt. Um die Zertifikat-Anmeldung zu aktivieren, folgen Sie demselben Verfahren zur Erzeugung eines Schlüsselpaares, ohne den öffentlichen Schlüssel auf den SSH-Server zu übertragen.
Sie müssen den öffentlichen Schlüssel nicht den Dateien authorized_keys oder administrators_authorized_keys auf dem SSH-Server zuordnen. Stattdessen wird der öffentliche Schlüssel mit Hilfe eines Zertifizierungsstellen (CA)-Schlüssels signiert.
Erstellen des Zertifizierungsstellen (CA)-Schlüssels
Das Erzeugen der CA-Schlüssel zum Signieren ist ähnlich wie das Erzeugen eines Benutzerschlüsselpaares, das Sie zuvor in diesem Artikel gemacht haben. Dieses Mal müssen Sie jedoch einen Dateinamen für die neuen CA-Schlüssel angeben. Um dies zu tun, auf Ihrem Windows Server in einer PowerShell-Konsole:
Führen Sie den Befehl ssh-keygen
wie unten gezeigt aus. Dieser Befehl erstellt den CA-Schlüssel in C:\ProgramData\ssh\ca_userkeys, aber Sie können auch einen anderen Dateinamen verwenden. Die Verwendung eines anderen Dateinamens beeinträchtigt die Funktionalität des CA-Schlüssels nicht.
Wenn Sie nach einer Passphrase gefragt werden, lassen Sie die Passphrase leer und drücken Sie Enter.
Sie können unten sehen, dass der Befehl zwei Dateien erstellt hat. ca_userkeys, was der private Schlüssel ist, und ca_userkeys.pub, was der öffentliche Schlüssel ist.

Nachdem Sie die CA-Schlüssel generiert haben, müssen Sie dem SSH-Server mitteilen, dass er der CA vertraut und wo er den CA-Schlüssel finden kann. Fügen Sie dazu eine neue Zeile TrustedUserCAKeys Pfad/zur/ca_userkeys.pub
zur Datei C:\ProgramData\ssh\sshd_config auf dem Server hinzu.
Führen Sie die folgenden Befehle aus, um den Konfigurationsparameter in der Datei sshd_config anzufügen.
Unterzeichnen des öffentlichen Schlüssels des Benutzers
Zu diesem Zeitpunkt haben Sie die CA-Schlüssel generiert und den SSH-Server so konfiguriert, dass er der CA-öffentlichen Schlüsseldatei vertraut. Jetzt müssen Sie nur noch Ihren Benutzer öffentlichen Schlüssel unterzeichnen.
Auf Ihrem lokalen Computer, in einer PowerShell-Konsole:
1. Kopieren Sie die Datei id_rsa.pub
mit dem SCP-Befehl auf Ihr Heimatlaufwerk auf dem SSH-Server. Stellen Sie sicher, dass Sie den Benutzernamen und die IP-Adresse in die korrekten Werte ändern.
2. Melden Sie sich über ssh bei Ihrem Windows Server an. Sobald Sie angemeldet sind, führen Sie den Befehl ssh-keygen
aus, um den öffentlichen Schlüssel des Benutzers zu signieren. Sie werden feststellen, dass der unten stehende Befehl mehrere Parameter verwendet. Lassen Sie uns diese aufschlüsseln.
-s C:\ProgramData\ssh\ca_userkeys
– geben Sie den Speicherort des CA-Schlüssels an, um den öffentlichen Schlüssel zu signieren. In diesem Beispiel ist der CA-Schlüssel der von Ihnen generierte Schlüssel.-I id_username
– geben Sie die ID an, die Sie dem signierten öffentlichen Schlüssel des Benutzers zuweisen möchten. Ändern Sie den Wert vonid_username
in einen beliebigen Namen.-V +4w
– dieser Parameter gibt die Gültigkeitsdauer des signierten Schlüssels an. In diesem Beispiel bedeutet+4w
, dass der signierte Benutzerschlüssel vier Wochen lang gültig ist. Sie können diesen Wert nach Belieben ändern.-n Benutzername
– dies ist der Benutzername, dem der signierte öffentliche Schlüssel gehören wird.<Pfad zu id_rsa.pub>
– dies ist der Speicherort des öffentlichen Schlüssels des Benutzers zum Signieren (Windows).
Nachdem Sie den Befehl in Ihrer SSH-Sitzung ausgeführt haben, sollten Sie eine ähnliche Ausgabe wie unten gezeigt erhalten. Wie Sie sehen können, wurde durch den Befehl eine neue Datei mit dem Namen id_rsa-cert.pub generiert, die das signierte Benutzerzertifikat ist.

3. Navigieren Sie nun zurück zu Ihrer lokalen PowerShell-Sitzung auf Ihrem Computer und kopieren Sie die Datei id_rsa-cert.pub vom Server auf Ihren lokalen Computer. Ändern Sie zuerst den Benutzernamen und die IP-Adresse auf die richtigen Werte, bevor Sie den Befehl ausführen.
Nach Abschluss des Kopiervorgangs finden Sie das signierte Benutzerzertifikat in Ihrem Home-Verzeichnis, wie unten gezeigt.

Verbindung mit SSH unter Verwendung der Zertifikatauthentifizierung
Sie haben die Zertifikatsauthentifizierung konfiguriert und besitzen nun Ihr Benutzerzertifikat. Nun sollten Sie testen, ob Sie eine Verbindung zum SSH-Server mit Zertifikatsauthentifizierung herstellen können.
Der Befehl zum Verbinden mit SSH mithilfe eines Zertifikats ist derselbe wie bei der Verwendung eines Passworts oder eines öffentlichen Schlüssels. Wenn Sie zuvor die öffentliche Schlüsselauthentifizierung aktiviert haben, deaktivieren Sie diese zunächst. Andernfalls verwendet SSH weiterhin Ihr Schlüsselpaar anstelle Ihres Zertifikats.
Um Ihr Schlüsselpaar zu deaktivieren, entfernen Sie Ihren öffentlichen Schlüssel aus der Datei „administrators_authorized_keys“. Gehen Sie dazu wie folgt vor.
Beachten Sie, dass die nachfolgenden Befehle die gesamte Datei „administrators_authorized_keys“ leeren und somit alle zugeordneten öffentlichen Schlüssel entfernen. Wenn Sie nicht alle zugeordneten öffentlichen Schlüssel löschen möchten, verwenden Sie einen Texteditor, um ausgewählte öffentliche Schlüssel manuell aus jeder Datei zu entfernen.
Während Sie über SSH mit dem Windows Server verbunden sind:
1. Führen Sie den folgenden Code in PowerShell aus, um die Datei „administrators_authorized_keys“ zu leeren.
2. Zu diesem Zeitpunkt sind die Dateien „authorized_keys“ und „administrators_authorized_keys“ leer, wie Sie im untenstehenden Screenshot sehen können.

3. Geben Sie „exit“ ein und drücken Sie die Eingabetaste, um die SSH-Sitzung zu trennen. Sie kehren zu Ihrer PowerShell-Sitzung zurück.
4. Nachdem Sie die öffentlichen Schlüssel entfernt haben, wird Ihr nächster SSH-Anmeldeversuch die Zertifikatsauthentifizierung verwenden. Das Anmeldeerlebnis wird dem der öffentlichen Schlüsselauthentifizierung entsprechen.

Abschluss
Sie haben nun einen OpenSSH Windows Server von Grund auf eingerichtet und verschiedene Authentifizierungsmethoden erforscht und eingerichtet. Sie können nun eine Verbindung zu Ihren Windows Servern herstellen, genau wie Sie es mit Linux tun würden!