域管理员使用PowerShell远程PSSession连接Windows服务器失败排查
WinRM Kerberos认证故障排查(Windows Server 2019)
问题背景
我正在排查PRTG传感器无法从单台服务器采集Windows Update信息的问题,该传感器基于WinRM和PowerShell远程命令实现采集。
- 服务器1:故障服务器
- 服务器2:正常服务器
故障现象
当我尝试使用Enter-PSSession -ComputerName Server1或winrs -r:Server1 dir测试连接时,持续收到如下报错:
PS C:\WINDOWS\system32> winrs -r:Server1 dir Winrs错误:WinRM无法处理请求,使用Kerberos认证时出现错误码0x80090322,发生未知安全错误。 可能原因包括: - 指定的用户名或密码无效 - 未指定认证方式和用户名时默认使用Kerberos - Kerberos支持域用户名,不支持本地用户名 - 远程计算机名称和端口对应的服务主体名称(SPN)不存在 - 客户端和远程计算机属于不同域且无信任关系 排查上述问题后可尝试以下操作: - 检查事件查看器中与认证相关的事件 - 更换认证方式,将目标计算机添加到WinRM TrustedHosts配置项,或使用HTTPS传输 请注意TrustedHosts列表中的计算机可能不会经过身份验证。 如需了解更多WinRM配置信息,可执行命令:winrm help config。 PS C:\WINDOWS\system32> Enter-PSSession -ComputerName Server1 Enter-PSSession : 连接到远程服务器Server1失败,返回如下错误信息:WinRM无法处理请求,使用Kerberos认证时出现错误码0x80090322,发生未知安全错误。 可能原因包括: - 指定的用户名或密码无效 - 未指定认证方式和用户名时默认使用Kerberos - Kerberos支持域用户名,不支持本地用户名 - 远程计算机名称和端口对应的服务主体名称(SPN)不存在 - 客户端和远程计算机属于不同域且无信任关系 排查上述问题后可尝试以下操作: - 检查事件查看器中与认证相关的事件 - 更换认证方式,将目标计算机添加到WinRM TrustedHosts配置项,或使用HTTPS传输 请注意TrustedHosts列表中的计算机可能不会经过身份验证。 如需了解更多WinRM配置信息,可执行命令:winrm help config。更多信息请参考about_Remote_Troubleshooting帮助主题。 所在位置 行:1 字符:1 + Enter-PSSession -ComputerName Server1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (Server1:String) [Enter-PSSession], PSRemotingTransportException + FullyQualifiedErrorId : CreateRemoteRunspaceFailed
其他关联现象:
- 在其他任意服务器上执行相同命令均可成功连接,仅该故障服务器存在问题
- 为
Enter-PSSession添加-Credential参数指定域用户账号,仍返回相同错误;但指定服务器本地管理员账号时可以正常连接,其他服务器均无此问题
PS C:\WINDOWS\system32> Enter-PSSession -ComputerName Server1 -Credential Server1\administrator [Server1]: PS C:\Users\Administrator\Documents> exit PS C:\WINDOWS\system32> Enter-PSSession -ComputerName Server1 -credential domain\myuser Enter-PSSession : 连接到远程服务器Server1失败,返回如下错误信息:WinRM无法处理请求,使用Negotiate认证时出现错误码0x80090322,发生未知安全错误。 可能原因包括: - 指定的用户名或密码无效 - 未指定认证方式和用户名时默认使用Kerberos - Kerberos支持域用户名,不支持本地用户名 - 远程计算机名称和端口对应的服务主体名称(SPN)不存在 - 客户端和远程计算机属于不同域且无信任关系 排查上述问题后可尝试以下操作: - 检查事件查看器中与认证相关的事件 - 更换认证方式,将目标计算机添加到WinRM TrustedHosts配置项,或使用HTTPS传输 请注意TrustedHosts列表中的计算机可能不会经过身份验证。 如需了解更多WinRM配置信息,可执行命令:winrm help config。更多信息请参考about_Remote_Troubleshooting帮助主题。 所在位置 行:1 字符:1 + Enter-PSSession -ComputerName Server1 -credential alpenaw2k.local\kemp ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (Server1:String) [Enter-PSSession], PSRemotingTransportException + FullyQualifiedErrorId : CreateRemoteRunspaceFailed PS C:\WINDOWS\system32> Enter-PSSession -ComputerName Server2 [Server2]: PS C:\Users\user\Documents> exit PS C:\WINDOWS\system32>
- 在故障服务器本地执行
New-PSSession也会返回相同错误,只有添加-EnableNetworkAccess参数时才能成功连接,该现象不符合预期。事件查看器返回与用户认证相关的事件ID 161,以及会话创建失败的错误ID 142 - 在故障服务器本地和远程主机上执行
Test-WSMan均返回服务正常运行的结果
WinRM配置信息
WinRM全局配置和监听器配置如下:
PS C:\Windows\system32> winrm get winrm/config Config MaxEnvelopeSizekb = 500 MaxTimeoutms = 60000 MaxBatchItems = 32000 MaxProviderRequests = 4294967295 Client NetworkDelayms = 5000 URLPrefix = wsman AllowUnencrypted = false Auth Basic = true Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = false DefaultPorts HTTP = 5985 HTTPS = 5986 TrustedHosts = 10.10.10.142 Service RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) MaxConcurrentOperations = 4294967295 MaxConcurrentOperationsPerUser = 1500 EnumerationTimeoutms = 240000 MaxConnections = 300 MaxPacketRetrievalTimeSeconds = 120 AllowUnencrypted = false Auth Basic = false Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true Winrs AllowRemoteShellAccess = true IdleTimeout = 7200000 MaxConcurrentUsers = 2147483647 MaxShellRunTime = 2147483647 MaxProcessesPerShell = 2147483647 MaxMemoryPerShellMB = 2147483647 MaxShellsPerUser = 2147483647 PS C:\Windows\system32> winrm enumerate winrm/config/listener Listener Address = * Transport = HTTP Port = 5985 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 10.10.10.87, 127.0.0.1, ::1, fe80::4579:db85:c9cb:ead0%6
已尝试排查操作
- 无针对WinRM的GPO配置
- 删除并重新创建了监听器
- 多次重置WinRM配置
- 公网、专用、域网络的Windows高级防火墙均已关闭
- 检查
Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI的权限配置,权限符合要求 - 使用IP地址替代主机名测试,结果相同
- 将测试计算机添加到TrustedHosts列表,仍未解决(两台设备属于同一域,本无需该配置)
- 执行
Enable-PSRemoting -Force(Windows Server 2012及以上版本默认已启用WinRM,该操作本非必要) - 将域用户添加到服务器本地管理员组和远程管理用户组,无效果
- 修改注册表项
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1,无论该值为多少均无法解决问题 - 重启服务器并执行
sfc /scannow扫描修复系统,无效果
环境信息
- 测试使用的域账号为域管理员
- 故障服务器为Windows Server 2019 Standard
- 测试工作站为Windows 10 Pro
- 两端PowerShell版本均为5
- 两台设备属于同一域
- 两台设备均已安装最新系统补丁
补充信息
故障服务器的Windows远程管理日志中无错误条目,测试工作站上存在如下错误日志:
- 错误事件ID - 142
WSMan枚举操作失败,错误码2150858909
- 错误事件ID - 49
WinRM协议操作失败,错误原因:WinRM无法处理请求,使用Kerberos认证时出现错误码0x80090322,发生未知安全错误。 可能原因包括: - 指定的用户名或密码无效 - 未指定认证方式和用户名时默认使用Kerberos - Kerberos支持域用户名,不支持本地用户名 - 远程计算机名称和端口对应的服务主体名称(SPN)不存在 - 客户端和远程计算机属于不同域且无信任关系 排查上述问题后可尝试以下操作: - 检查事件查看器中与认证相关的事件 - 更换认证方式,将目标计算机添加到WinRM TrustedHosts配置项,或使用HTTPS传输 请注意TrustedHosts列表中的计算机可能不会经过身份验证。 如需了解更多WinRM配置信息,可执行命令:winrm help config。
- 错误事件ID - 161
WinRM无法处理请求,使用Kerberos认证时出现错误码0x80090322,发生未知安全错误。 可能原因包括: - 指定的用户名或密码无效 - 未指定认证方式和用户名时默认使用Kerberos - Kerberos支持域用户名,不支持本地用户名 - 远程计算机名称和端口对应的服务主体名称(SPN)不存在 - 客户端和远程计算机属于不同域且无信任关系 排查上述问题后可尝试以下操作: - 检查事件查看器中与认证相关的事件 - 更换认证方式,将目标计算机添加到WinRM TrustedHosts配置项,或使用HTTPS传输 请注意TrustedHosts列表中的计算机可能不会经过身份验证。 如需了解更多WinRM配置信息,可执行命令:winrm help config。
其他测试结果:
- 可正常通过RDP连接到故障服务器,此前的本地测试均通过RDP登录后执行
gwmi win32_operatingsystem -ComputerName Server1可正常执行,无报错(指定远程服务器执行和RDP登录后本地执行均正常)Get-CimInstance win32_operatingsystem -ComputerName Server1无法在工作站上远程执行,但RDP登录到故障服务器后本地执行正常
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

