本文介绍 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)按以下顺序从配置文件读取配置数据:
- 通过使用
ssh.exe
,以-F
参数开始,其中包括一个配置文件的路径和该文件中的条目名称。 - 通过用户的配置文件位于
%userprofile%\.ssh\config
. - 通过位于
%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
您可以通过使用AllowGroups
、AllowUsers
、DenyGroups
和DenyUsers
指令来控制哪些用户和组能够连接到服务器。
允许和拒绝指令按以下顺序进行处理: DenyUsers
、 AllowUsers
、 DenyGroups
最后 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,唯一可用的身份验证方法是 password
和 publickey
。
重要
目前不支持通过 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