OpenSSH-Schlüsselverwaltung

Gilt für: Windows Server 2019, Windows 10: Windows Server 2022,

Die meisten Authentifizierungen in Windows-Umgebungen erfolgen mit einem Benutzername-Kennwort-Paar. Dies eignet sich gut für Systeme in einer gemeinsamen Domäne. Bei domänenübergreifenden Arbeiten wie beispielsweise zwischen lokalen und in der Cloud gehosteten Systemen kann dies zu Sicherheitslücken und Anfälligkeit für Brute-Force-Angriffe führen.

Im Vergleich dazu verwenden Linux-Umgebungen für die Authentifizierung häufig Paare aus einem öffentlichen und einem privaten Schlüssel, die keine leicht zu erratenden Kennwörter erfordern. OpenSSH enthält Tools zur Unterstützung dieser Authentifizierungsmethoden einschließlich der folgenden:

  • ssh-keygen zum Generieren sicherer Schlüssel
  • ssh-agent und ssh-add zum sicheren Speichern privater Schlüssel
  • scp und sftp zum sicheren Kopieren öffentlicher Schlüssel bei der erstmaligen Verwendung eines Servers

Dieses Dokument bietet eine Übersicht über die Verwendung dieser Tools unter Windows für die schlüsselbasierte Authentifizierung mit SSH. Wenn Sie mit der SSH-Schlüsselverwaltung nicht vertraut sind, empfehlen wir Ihnen dringend, das NIST-Dokument IR 7966 mit dem Titel „Security of Interactive and Automated Access Management Using Secure Shell (SSH)“ (Sicherheit der interaktiven und automatisierten Zugriffsverwaltung mit Secure Shell (SSH)) zu lesen.

Informationen zu Schlüsselpaaren

Schlüsselpaare verweisen auf die Dateien für öffentliche und private Schlüssel, die von bestimmten Authentifizierungsprotokollen verwendet werden.

Bei der SSH-Authentifizierung mit öffentlichem Schlüssel werden asymmetrische Kryptografiealgorithmen verwendet, um zwei Schlüsseldateien (privat und öffentlich) zu generieren. Die Dateien des privaten Schlüssels entsprechen einem Kennwort und sollten unter allen Umständen gut geschützt werden. Wenn jemand Ihren privaten Schlüssel erhält, kann sich diese Person bei jedem beliebigen SSH-Server anmelden, auf den Sie Zugriff haben. Der öffentliche Schlüssel wird auf dem SSH-Server abgelegt und ggf. freigegeben, ohne dass dabei der private Schlüssel kompromittiert wird.

Bei Verwendung der Schlüsselauthentifizierung mit einem SSH-Server vergleichen der SSH-Server und der SSH-Client den öffentlichen Schlüssel für einen Benutzernamen, der für den privaten Schlüssel bereitgestellt wird. Wenn der serverseitige öffentliche Schlüssel nicht anhand des clientseitigen privaten Schlüssels überprüft werden kann, schlägt die Authentifizierung fehl.

Die mehrstufige Authentifizierung kann mit Schlüsselpaaren implementiert werden, indem eine Passphrase eingegeben wird, wenn das Schlüsselpaar generiert wird (siehe Generierung des Benutzerschlüssels unten). Während der Authentifizierung wird der Benutzer zur Eingabe dieser Passphrase aufgefordert. Diese wird zusammen mit dem privaten Schlüssel auf dem SSH-Client verwendet, um den Benutzer zu authentifizieren.

Generierung des Hostschlüssels

Öffentliche Schlüssel weisen bestimmte ACL-Anforderungen auf, die unter Windows nur den Zugriff auf Administratoren und das System erlauben. Bei der ersten Verwendung von SSHD wird das Schlüsselpaar für den Host automatisch generiert.

Wichtig

Der OpenSSH-Server muss zuerst installiert werden. Weitere Informationen finden Sie unter Erste Schritte mit OpenSSH.

Standardmäßig ist der SDSD-Dienst so konfiguriert, dass er manuell gestartet wird. Führen Sie die folgenden Befehle an einer PowerShell-Eingabeaufforderung mit erhöhten Rechten auf Ihrem Server aus, um ihn bei jedem Neustart des Servers zu starten:

# Set the sshd service to be started automatically
Get-Service -Name sshd | Set-Service -StartupType Automatic

# Now start the sshd service
Start-Service sshd

Da dem SSHD-Dienst kein Benutzer zugeordnet ist, werden die Hostschlüssel unter „C:\ProgramData\ssh“ gespeichert.

Generierung des Benutzerschlüssels

Sie müssen für den Client zunächst Schlüsselpaare aus öffentlichen und privaten Schlüsseln generieren, um die schlüsselbasierte Authentifizierung verwenden zu können. „ssh-keygen.exe“ wird zum Generieren von Schlüsseldateien verwendet, und die Algorithmen DSA, RSA, ECDSA oder Ed25519 können angegeben werden. Wenn kein Algorithmus angegeben ist, wird RSA verwendet. Es sollten ein starker Algorithmus und eine sichere Schlüssellänge verwendet werden, wie Ed25519 in diesem Beispiel.

Um Schlüsseldateien mit dem Ed25519-Algorithmus zu generieren, führen Sie folgenden Befehl an einer PowerShell- oder cmd-Eingabeaufforderung auf Ihrem Client aus:

ssh-keygen -t ed25519

Anschließend sollte in etwa Folgendes angezeigt werden (wobei „username“ durch Ihren Benutzernamen ersetzt wird):

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username\.ssh\id_ed25519):

Sie können die EINGABETASTE drücken, um die Standardeinstellung zu übernehmen, oder einen Pfad und/oder Dateinamen angeben, in dem die Schlüssel generiert werden sollen. An diesem Punkt werden Sie aufgefordert, eine Passphrase zum Verschlüsseln der Dateien für den privaten Schlüssel zu verwenden. Diese Option kann leer sein, was jedoch nicht empfohlen wird. Zusammen mit der Schlüsseldatei kann mit der Passphrase die zweistufige Authentifizierung bereitgestellt werden. In diesem Beispiel wird die Passphrase leer gelassen.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username\.ssh\id_ed25519.
Your public key has been saved in C:\Users\username\.ssh\id_ed25519.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@server@LOCAL-HOSTNAME

The key's randomart image is:
+--[ED25519 256]--+
|        .        |
|         o       |
|    . + + .      |
|   o B * = .     |
|   o= B S .      |
|   .=B O o       |
|  + =+% o        |
| *oo.O.E         |
|+.o+=o. .        |
+----[SHA256]-----+

Nun verfügen Sie über ein öffentliches/privates Ed25519-Schlüsselpaar am angegebenen Speicherort. Die PUB-Dateien sind öffentliche Schlüssel, und Dateien ohne Erweiterung sind private Schlüssel:

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         6/3/2021   2:55 PM            464 ed25519
-a----         6/3/2021   2:55 PM            103 ed25519.pub

Beachten Sie, dass die Dateien des privaten Schlüssels dem Kennwort entsprechen und daher auf dieselbe Weise geschützt werden müssen wie Ihr Kennwort. Verwenden Sie hierfür „ssh-agent“, um die privaten Schlüssel innerhalb eines sicheren Windows-Sicherheitskontexts zu speichern, der Ihrem Windows-Anmeldenamen zugeordnet ist. Starten Sie hierzu den „ssh-agent“-Dienst als Administrator, und verwenden Sie „ssh-add“, um den privaten Schlüssel zu speichern.

# By default the ssh-agent service is disabled. Allow it to be manually started for the next step to work.
# Make sure you're running as an Administrator.
Get-Service ssh-agent | Set-Service -StartupType Manual

# Start the service
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add ~\.ssh\id_ed25519

Nachdem Sie diese Schritte ausgeführt haben, ruft „ssh-agent“ immer automatisch den privaten Schlüssel ab und übergibt ihn an Ihren SSH-Client, wenn für die Authentifizierung dieses Clients ein privater Schlüssel erforderlich ist.

Wichtig

Es wird dringend empfohlen, dass Sie den privaten Schlüssel an einem sicheren Speicherort verwahren und aus dem lokalen System löschen, nachdem Sie ihn zu „ssh-agent“ hinzugefügt haben. Der private Schlüssel kann nicht vom Agent abgerufen werden, vorausgesetzt, ein starker Algorithmus wurde verwendet, wie Ed25519 in diesem Beispiel. Wenn Sie keinen Zugriff mehr auf den privaten Schlüssel haben, müssen Sie ein neues Schlüsselpaar erstellen und den öffentlichen Schlüssel auf allen Systemen aktualisieren, mit denen Sie interagieren.

Bereitstellen des öffentlichen Schlüssels

Um den oben erstellten Benutzerschlüssel zu verwenden, muss der Inhalt Ihres öffentlichen Schlüssels (~\.ssh\id_ed25519.pub) auf dem Server in einer Textdatei abgelegt werden, deren Name und Speicherort davon abhängen, ob das Benutzerkonto Mitglied der lokalen Administratorgruppe oder ein Standardbenutzerkonto ist.

Standardbenutzer

Der Inhalt Ihres öffentlichen Schlüssels (~\.ssh\id_ed25519.pub) muss auf dem Server in einer Textdatei namens authorized_keys in „C:\Users\username\.ssh\“ abgelegt werden. Der OpenSSH-Client umfasst mit scp ein sicheres Dienstprogramm für den Dateitransfer.

Im folgenden Beispiel wird der öffentliche Schlüssel auf den Server kopiert (wobei „username“ durch Ihren Benutzernamen ersetzt wird). Sie müssen zunächst das Kennwort für das Benutzerkonto für den Server verwenden.

# Make sure that the .ssh directory exists in your server's user account home folder
ssh username@domain1@contoso.com mkdir C:\Users\username\.ssh\

# Use scp to copy the public key file generated previously on your client to the authorized_keys file on your server
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\Users\username\.ssh\authorized_keys

Administrator

Der Inhalt Ihres öffentlichen Schlüssels (~\.ssh\id_ed25519.pub) muss auf dem Server in einer Textdatei namens administrators_authorized_keys in „C:\ProgramData\ssh\“ abgelegt werden. Der OpenSSH-Client umfasst mit scp ein sicheres Dienstprogramm für den Dateitransfer. Die Zugriffssteuerungsliste für diese Datei muss so konfiguriert werden, dass der Zugriff nur für Administratoren und das System zugelassen wird.

Im folgenden Beispiel wird der öffentliche Schlüssel auf den Server kopiert und die Zugriffssteuerungsliste konfiguriert (wobei „username“ durch Ihren Benutzernamen ersetzt wird). Sie müssen zunächst das Kennwort für das Benutzerkonto für den Server verwenden.

Hinweis

Dieses Beispiel zeigt die Schritte zum Erstellen der administrators_authorized_keys file. Wenn es mehrmals ausgeführt wird, wird diese Datei jedes Mal überschrieben. Um den öffentlichen Schlüssel für mehrere Administratoren hinzuzufügen, müssen Sie diese Datei mit jedem öffentlichen Schlüssel anfügen.

# Make sure that the .ssh directory exists in your server's user account home folder
ssh user1@domain1@contoso.com mkdir C:\ProgramData\ssh\

# Use scp to copy the public key file generated previously on your client to the authorized_keys file on your server
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\ProgramData\ssh\administrators_authorized_keys

# Appropriately ACL the authorized_keys file on your server
ssh --% user1@domain1@contoso.com icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

Mit diesen Schritten wird die Konfiguration vervollständigt, die für die Verwendung der schlüsselbasierten Authentifizierung mit OpenSSH unter Windows erforderlich ist. Danach kann der Benutzer von jedem Client, der über den privaten Schlüssel verfügt, eine Verbindung mit dem SSHD-Host herstellen.