Konfiguration des OpenSSH Servers für Windows Server und Windows

Gilt für: Windows Server 2022, Windows Server 2019, Windows 10 (Build 1809 und höher)

In diesem Artikel wird die Windows-spezifische Konfiguration für OpenSSH Server (sshd) behandelt.

OpenSSH bietet online unter OpenSSH.com eine ausführliche Dokumentation der Konfigurationsoptionen, die in dieser Dokumentation nicht wiedergegeben wird.

OpenSSH-Konfigurationsdateien

OpenSSH verfügt über Konfigurationsdateien für Server- und Clienteinstellungen. OpenSSH ist Open Source und wird den Betriebssystemen Windows Server und Windows Client hinzugefügt, beginnend mit Windows Server 2019 und Windows 10 (Build 1809). Daher wird die Open-Source-Dokumentation für OpenSSH-Konfigurationsdateien hier nicht wiederholt. Konfigurationsdateien für Client finden Sie auf der Handbuchseite ssh_config und für OpenSSH Server auf der Handbuchseite sshd_config.

Open SSH Server (sshd) liest standardmäßig Konfigurationsdaten aus %programdata%\ssh\sshd_config, oder es kann eine andere Konfigurationsdatei durch Starten von sshd.exe mit dem Parameter -f angegeben werden. Wenn die Datei fehlt, erzeugt sshd beim Start des Diensts eine mit der Standardkonfiguration.

Unter Windows liest der OpenSSH-Client (ssh) Konfigurationsdaten aus einer Konfigurationsdatei in der folgenden Reihenfolge:

  1. Durch den Start von ssh.exe mit dem Parameter -F, der einen Pfad zu einer Konfigurationsdatei und einen Eintragsnamen aus dieser Datei angibt.
  2. Die Konfigurationsdatei eines Benutzers unter %userprofile%\.ssh\config.
  3. Die systemweite Konfigurationsdatei unter %programdata%\ssh\ssh_config.

Konfigurieren der Standardshell für OpenSSH unter Windows

Die Standardbefehlsshell stellt die Benutzeroberfläche bereit, die einem Benutzer beim Herstellen einer Verbindung mit dem Server über SSH angezeigt wird. Das erste Standardfenster ist die Windows-Befehlsshell (cmd. exe). Windows bietet auch PowerShell sowie Befehlsshells von Drittanbietern, die auch für Windows verfügbar sind und als Standardshell für einen Server konfiguriert werden können.

Um die Standardbefehlsshell festzulegen, vergewissern Sie sich zunächst, dass sich der OpenSSH-Installationsordner im Systempfad befindet. Unter Windows lautet der Standardinstallationsordner %systemdrive%\Windows\System32\openssh. Der folgende Befehl zeigt die aktuelle Pfadeinstellung und fügt den Standardordner der OpenSSH-Installation hinzu.

Befehlsshell Zu verwendender Befehl
Befehl path
PowerShell $env:path

Die Konfiguration der standardmäßigen ssh-Shell erfolgt in der Windows-Registrierung durch Hinzufügen des vollständigen Pfads zur ausführbaren Shell zu HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH im String-Wert DefaultShell.

Als Beispiel legt der folgende erweiterte PowerShell-Befehl die Standardshell auf „powershell.exe“ fest:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Windows-Konfigurationen in sshd_config

In Windows liest sshd standardmäßig Konfigurationsdaten aus %programdata%\ssh\sshd_config, oder es kann eine andere Konfigurationsdatei durch Starten von sshd.exe mit dem Parameter -f angegeben werden. Wenn die Datei fehlt, erzeugt sshd beim Start des Diensts eine mit der Standardkonfiguration.

Die unten aufgeführten Elemente bieten eine Windows-spezifische Konfiguration, die durch Einträge in sshd_config möglich ist. Es gibt weitere mögliche Konfigurationseinstellungen, die hier nicht aufgeführt sind, da sie in der Onlinedokumentation zu Win32 OpenSSH ausführlich behandelt werden.

Tipp

Der OpenSSH-Server (sshd) liest die Konfigurationsdatei, wenn der Dienst startet. Bei Änderungen an der Konfigurationsdatei muss der Dienst neu gestartet werden.

AllowGroups, AllowUsers, DenyGroups, DenyUsers

Das Steuern, welche Benutzer und Gruppen eine Verbindung mit dem Server herstellen können, erfolgt mithilfe der Anweisungen AllowGroups, AllowUsers, DenyGroups und DenyUsers. Die Anweisungen zum Zulassen und Verweigern werden in der folgenden Reihenfolge verarbeitet: DenyUsers, AllowUsers, DenyGroups, und schließlich AllowGroups. Alle Kontonamen müssen in Kleinbuchstaben angegeben werden. Weitere Informationen zu MUSTERN und Platzhaltern in der ssh_config finden Sie auf der Handbuchseite sshd_config OpenBSD.

Wenn Sie benutzer-/gruppenbasierte Regeln mit einem Domänenbenutzer oder einer Domänengruppe konfigurieren, verwenden Sie das folgende Format: user?domain*. Windows lässt mehrere Formate für die Angabe von Domänenprinzipalen zu, aber viele stehen im Konflikt mit Linux-Standardmustern. Aus diesem Grund wird * zum Abdecken von FQDNs hinzugefügt. Außerdem verwendet dieser Ansatz „?“ anstelle von @, um Konflikte mit dem Format „username@host“ zu vermeiden.

Arbeitsgruppenbenutzer, Gruppen und mit dem Internet verbundene Konten werden stets in Ihren lokalen Kontonamen aufgelöst (ohne Domänenteil vergleichbar mit UNIX-Standardnamen). Domänenbenutzer und -gruppen werden streng in das Format NameSamCompatible aufgelöst: Kurzname_der_Domäne\Benutzername. Alle Benutzer-/gruppenbasierten Konfigurationsregeln müssen sich an dieses Format halten.

Das folgende Beispiel verweigert contoso\admin den Zugriff auf den Host 192.168.2.23 und blockiert alle Benutzer der Domäne „contoso“. Außerdem können Benutzer, die Mitglied der Gruppen contoso\sshusers und contoso\serveroperators sind, verwendet werden.

DenyUsers contoso\admin@192.168.2.23
DenyUsers contoso\*
AllowGroups contoso\sshusers contoso\serveroperators

Das folgende Beispiel erlaubt dem Benutzer „localusers“, sich vom Host 192.168.2.23 aus anzumelden und lässt Mitglieder der Gruppe „sshusers“ zu.

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

AuthenticationMethods

Für Windows OpenSSH sind die einzigen verfügbaren Authentifizierungsmethoden password and publickey.

Wichtig

Die Authentifizierung über ein Microsoft Entra-Konto wird derzeit nicht unterstützt.

AuthorizedKeysFile

Der Standardwert lautet .ssh/authorized_keys. Wenn der Pfad nicht absolut ist, wird er relativ zum Basisverzeichnis des Benutzers (oder zum Pfad des Profilbildes) genommen, zum Beispiel C:\Users\username. Wenn der Benutzer zur Gruppe der Administratoren gehört, wird stattdessen %programdata%/ssh/administrators_authorized_keys verwendet.

Tipp

Die Datei administrators_authorized_keys darf nur Berechtigungseinträge für das Konto NT Authority\SYSTEM und die Sicherheitsgruppe BUILTIN\Administrators enthalten. Dem Konto NT Authority\SYSTEM muss die uneingeschränkte Steuerung gewährt werden. Die Sicherheitsgruppe BUILTIN\Administratoren ist für Administratoren erforderlich, um die autorisierten Schlüssel zu verwalten; Sie können den erforderlichen Zugriff wählen. Sie können eine erweiterte PowerShell-Eingabeaufforderung öffnen und den Befehl icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F" ausführen, um Berechtigungen zu erteilen.

ChrootDirectory (Unterstützung in v7.7.0.0 hinzugefügt)

Dieses Verzeichnis wird nur für sftp-Sitzungen unterstützt. Eine Remote-Sitzung in cmd.exe würde ChrootDirectory nicht berücksichtigen. Um einen chroot-Server ausschließlich für sftp-Sitzungen einzurichten, legen Sie „ForceCommand“ auf „internal-sftp“ fest. Sie können scp auch mit chroot einrichten, indem Sie eine benutzerdefinierte Shell implementieren, die nur scp und sftp zulässt.

GSSAPIAuthentication

Das Konfigurationsargument GSSAPIAuthentication gibt an, ob eine GSSAPI-basierte Benutzerauthentifizierung zulässig ist. Der Standardwert für GSSAPIAuthentication ist nein.

Die GSSAPI-Authentifizierung erfordert auch die Verwendung des Wechsels von -K, der den Hostnamen angibt, wenn Sie den OpenSSH-Client verwenden. Alternativ können Sie auch einen entsprechenden Eintrag in der SSH-Client-Konfiguration erstellen. In Windows liest der OpenSSH-Client standardmäßig Konfigurationsdaten aus %userprofile%.ssh\config.

Nachfolgend sehen Sie ein Beispiel für die GSSAPI OpenSSH-Client-Konfiguration.

# Specify a set of configuration arguments for a host matching the pattern SERVER01.contoso.com
# Patterns are case sensitive
Host SERVER01.contoso.com
    # Enables GSSAPI authentication
    GSSAPIAuthentication yes
    # Forward (delegate) credentials to the server.
    GSSAPIDelegateCredentials yes

Wichtig

GSSAPI ist nur ab Windows Server 2022, Windows 11 und Windows 10 xxxx verfügbar.

HostKey

Die Standardwerte sind:

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

Wenn die Standardwerte nicht vorhanden sind, generiert sshd diese automatisch beim Start eines Diensts.

Match

Stimmt Bedingungen mit einem oder mehreren Kriterien ab. Bei einer Übereinstimmung werden die nachfolgenden Konfigurationsargumente angewendet. Übereinstimmungen verwenden die Musterregeln, die im Abschnitt AllowGroups, AllowUsers, DenyGroups, DenyUsers behandelt werden. Benutzer- und Gruppennamen erfordern Kleinschreibung.

PermitRootLogin

Gilt nicht unter Windows. Verwenden Sie Administratoren mit DenyGroups-Anweisung, um zu verhindern, dass sich Administratoren anmelden.

SyslogFacility

Wenn Sie eine dateibasierte Protokollierung benötigen, verwenden Sie LOCAL0. Protokolle werden unter %programdata%\ssh\logs generiert. Für jeden anderen Wert, einschließlich des Standardwerts, leitet AUTH die Protokollierung an ETW. Weitere Informationen finden Sie unter Protokollierungsmöglichkeiten unter Windows.

Konfigurationsargumente

Das folgende Konfigurationsargument ist ab Windows Server 2022, Windows 11 und Windows 10 xxxx verfügbar:

  • GSSAPIAuthentication

Die folgenden Konfigurationsargumente sind in der OpenSSH-Version, die in Windows Server und dem Windows-Client enthalten ist, nicht verfügbar:

  • AcceptEnv
  • AllowStreamLocalForwarding
  • AuthorizedKeysCommand
  • AuthorizedKeysCommandUser
  • AuthorizedPrincipalsCommand
  • AuthorizedPrincipalsCommandUser
  • ExposeAuthInfo
  • GSSAPICleanupCredentials
  • GSSAPIStrictAcceptorCheck
  • HostbasedAcceptedKeyTypes
  • HostbasedAuthentication
  • HostbasedUsesNameFromPacketOnly
  • IgnoreRhosts
  • IgnoreUserKnownHosts
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • KerberosGetAFSToken
  • KerberosOrLocalPasswd
  • KerberosTicketCleanup
  • PermitTunnel
  • PermitUserEnvironment
  • PermitUserRC
  • PidFile
  • PrintLastLog
  • PrintMotd
  • RDomain
  • StreamLocalBindMask
  • StreamLocalBindUnlink
  • StrictModes
  • X11DisplayOffset
  • X11Forwarding
  • X11UseLocalhost
  • XAuthLocation