适用于 Windows Server 和 Windows 的 OpenSSH Server 配置

本文介绍 OpenSSH Server(sshd)的特定于 Windows 的配置。

OpenSSH 在 OpenSSH.com 联机维护配置选项的详细文档。 此文档没有在此文档集中重复出现。

OpenSSH 配置文件

OpenSSH 具有服务器和客户端设置的配置文件。 OpenSSH 是开源的,从 Windows Server 2019 和 Windows 10(版本 1809)开始,被添加到 Windows Server 和 Windows 客户端操作系统中。 此处不会重复 OpenSSH 配置文件的开源文档。 可以在 ssh_config手动页上找到客户端配置文件。 可在 sshd_config手动页上找到 OpenSSH 服务器配置文件。

OpenSSH 服务器默认从 %programdata%\ssh\sshd_config 中读取配置数据。 可以通过使用sshd.exe参数运行-f来指定其他配置文件。 如果该文件缺失,sshd 会在服务启动时生成一个具有默认配置的文件。

在 Windows 中,OpenSSH 客户端(ssh)按以下顺序从配置文件读取配置数据:

  1. 通过使用 ssh.exe ,以 -F 参数开始,其中包括一个配置文件的路径和该文件中的条目名称。
  2. 通过用户的配置文件位于 %userprofile%\.ssh\config.
  3. 通过位于%programdata%\ssh\ssh_config的系统范围配置文件。

在 Windows 中为 OpenSSH 配置默认 shell

默认命令行界面提供用户在使用 SSH 连接到服务器时看到的体验。 Windows 中的初始默认值为 Windows 命令提示符(cmd.exe)。 Windows 还包括 PowerShell,非Microsoft命令行界面也可用于 Windows,并且可能配置为服务器的默认 shell。

若要设置默认命令行界面,请先确认 OpenSSH 安装文件夹位于系统路径上。 对于 Windows,默认安装文件夹为 %systemdrive%\Windows\System32\openssh. 以下命令显示当前路径设置,并将默认的 OpenSSH 安装文件夹添加到其中。

命令 shell 要使用的命令
命令 path
PowerShell $env:path

可以通过在 Windows 注册表中的字符串值 DefaultShell 里添加 shell 可执行文件的完整路径 HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH 来配置默认的 ssh shell。

以下示例中提升权限的 PowerShell 命令将默认 shell 设置为 powershell.exe,用于 OpenSSH Server。 (设置此路径不适用于 OpenSSH 客户端。

$NewItemPropertyParams = @{
    Path         = "HKLM:\SOFTWARE\OpenSSH"
    Name         = "DefaultShell"
    Value        = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
    PropertyType = "String"
    Force        = $true
}
New-ItemProperty @NewItemPropertyParams

sshd_config 中的 Windows 操作系统配置

在 Windows 中,sshd 默认从 %programdata%\ssh\sshd_config 中读取配置数据。 可以通过使用sshd.exe参数运行-f来指定其他配置文件。 如果文件丢失,sshd 会在启动服务时生成一个带有默认配置的文件。

以下部分介绍可通过sshd_config中的条目实现的特定于 Windows 的配置设置。 还有其他可能的配置选项未在此列出。 Win32 OpenSSH 文档中详细介绍了它们。

小窍门

OpenSSH 服务器(sshd)在服务启动时读取配置文件。 对配置文件所做的任何更改都需要重启服务。

AllowGroups、AllowUsers、DenyGroups、DenyUsers

您可以通过使用AllowGroupsAllowUsersDenyGroupsDenyUsers指令来控制哪些用户和组能够连接到服务器。 允许和拒绝指令按以下顺序进行处理: DenyUsersAllowUsersDenyGroups最后 AllowGroups

所有帐户名称都必须以小写形式指定。

有关ssh_config中的模式和通配符的详细信息,请参阅 sshd_config OpenBSD 手册页

使用域用户或组配置基于用户/组的规则时,请使用以下格式:user?domain*

Windows 允许多种格式指定域主体,但可能与标准 Linux 模式冲突。 因此, * 用于涵盖完全限定的域名(FQDN)。 此外,此方法使用 ?,而不是 @,以避免与 username@host 格式冲突。

工作组用户、组和连接到互联网的帐户将会被解析为其本地账户名称(没有域部分,类似于标准 Unix 名称)。 域用户和组严格解析为 NameSamCompatible 格式 domain_short_name\user_name

所有用户和基于组的配置规则都需要遵循此格式。

以下示例拒绝来自主机 192.168.2.23 的 contoso\admin 并封锁来自 Contoso 域的所有用户。 它还允许属于 contoso\sshusers 组和 contoso\serveroperators 组的成员用户。

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

以下示例允许用户 localuser 从主机 192.168.2.23 登录,并允许组 sshusers的成员。

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

身份验证方法

对于 Windows OpenSSH,唯一可用的身份验证方法是 passwordpublickey

重要

目前不支持通过 Microsoft Entra 帐户进行身份验证。

AuthorizedKeysFile

默认值为 .ssh/authorized_keys。 如果未指定绝对路径,OpenSSH 将查找相对于主目录的文件,例如 C:\Users\username。 如果用户属于管理员组,则使用 %programdata%/ssh/administrators_authorized_keys

小窍门

administrators_authorized_keys文件中只有对NT Authority\SYSTEM帐户和BUILTIN\Administrators安全组的权限条目。 必须向 NT Authority\SYSTEM 帐户授予完全控制权限。 安全组 BUILTIN\Administrators 是使管理员能够管理授权密钥所必需的。 可以选择所需的访问权限。 若要授予权限,可以打开提升的 PowerShell 提示符并运行命令 icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

ChrootDirectory (在 v7.7.0.0 中添加的支持)

此指令仅支持 SFTP 会话。 进入 cmd.exe 的远程会话不遵循 ChrootDirectory。 若要设置仅限 sftp 的 chroot 服务器,请设置为 ForceCommand internal-sftp。 还可以通过实现仅允许 SCP 和 SFTP 的自定义 shell,使用 chroot 设置 SCP。

GSSAPI身份验证

配置 GSSAPIAuthentication 参数指定是否允许基于 GSSAPI (Kerberos) 的用户身份验证。 默认值 GSSAPIAuthentication 为 no。

使用 OpenSSH 客户端时,GSSAPI 身份验证还需要使用 -K 指定主机名的开关。 或者,可以在 SSH 客户端配置中创建相应的条目。 在 Windows 中,OpenSSH 客户端默认从 %userprofile%\.ssh\config 中读取配置数据。

下面是 GSSAPI OpenSSH 客户端配置示例:

# 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

重要

GSSAPI 仅在 Windows Server 2022、Windows 11 和 Windows 10(2021 年 5 月更新)中可用。

主机密钥

默认值为:

#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

如果默认值不存在,sshd 会在服务启动时自动生成它们。

匹配

使用一个或多个条件匹配条件。 匹配后,将应用后续配置参数。 Match 使用 AllowGroups、AllowUsers、DenyGroups、DenyUsers 节中涵盖的模式规则。 用户和组名称应采用小写形式。

PermitRootLogin

在 Windows 中不适用。 若要防止管理员登录,请使用 DenyGroups 指令。

SyslogFacility

如果需要基于文件的日志记录,请使用 LOCAL0。 在%programdata%\ssh\logs下生成日志。 对于任何其他值(包括默认值),AUTH 会将日志记录定向到 ETW。 有关详细信息,请参阅 Windows 中的日志记录设施

配置参数

从 Windows Server 2022、Windows 11 和 Windows 10(2021 年 5 月更新)开始,可以使用以下配置参数:

  • GSSAPIAuthentication

以下配置参数在 Windows Server 和 Windows 中随附的 OpenSSH 版本中不可用:

  • 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