按事件 ID 排查 Azure VM RDP 连接问题
本文介绍如何使用事件 ID 来排查阻止远程桌面协议 (RDP) 连接到 Azure 虚拟机 (VM) 的问题。
症状
尝试使用远程桌面协议 (RDP) 会话连接到 Azure VM。 输入凭据后,连接失败,并收到以下错误消息:
此计算机无法连接到远程计算机。 如果问题仍然存在,请再次尝试连接,请与远程计算机的所有者或网络管理员联系。
若要排查此问题,请查看 VM 上的事件日志,然后参考以下方案。
排查问题之前
创建备份快照
若要创建备份快照,请按照为磁盘创建快照中的步骤操作。
远程连接到 VM
若要远程连接到 VM,请使用 如何使用远程工具排查 Azure VM 问题中的方法之一。
方案 1
事件日志
在 CMD 实例中,运行以下命令,检查过去 24 小时内系统日志中是否记录了事件 1058 或事件 1057:
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-TerminalServices-RemoteConnectionManager'] and EventID=1058 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-TerminalServices-RemoteConnectionManager'] and EventID=1057 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
日志名称: 系统
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
日期:时间
事件 ID: 1058
任务类别: 没有
水平: 错误
关键 字: 经典
用户: 不适用
Computer:computer
描述: RD 会话主机服务器未能替换用于 TLS 连接上的 RD 会话主机服务器身份验证的过期自签名证书。 相关状态代码为“访问被拒绝”。
日志名称: 系统
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
日期:时间
事件 ID: 1058
任务类别: 没有
水平: 错误
关键 字: 经典
用户: 不适用
Computer:computer
描述: RD 会话主机服务器未能创建用于 TLS 连接上的 RD 会话主机服务器身份验证的新自签名证书,相关状态代码为对象已存在。
日志名称: 系统
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
日期:时间
事件 ID: 1057
任务类别: 没有
水平: 错误
关键 字: 经典
用户: 不适用
Computer:computer
描述: RD 会话主机服务器未能创建新的自签名证书,以用于 TLS 连接上的 RD 会话主机服务器身份验证。 相关状态代码为 Keyset 不存在
还可以通过运行以下命令检查 SCHANNEL 错误事件 36872 和 36870:
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36870 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36872 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
日志名称: 系统
源: Schannel
日期: —
事件 ID: 36870
任务类别: 没有
水平: 错误
关键 字:
用户: 系统
Computer:computer
描述: 尝试访问 TLS 服务器凭据私钥时发生严重错误。 加密模块返回的错误代码0x8009030D。
内部错误状态为 10001。
原因
出现此问题的原因是无法访问 VM 上的 MachineKeys 文件夹中的本地 RSA 加密密钥。 出现此问题的原因有以下其中一种:
Machinekeys 文件夹或 RSA 文件的权限配置错误。
RSA 密钥损坏或缺失。
解决方案
若要解决此问题,必须使用以下步骤设置 RDP 证书的正确权限。
授予对 MachineKeys 文件夹的权限
使用以下内容创建脚本:
remove-module psreadline icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt takeown /f "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)" icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt Restart-Service TermService -Force
运行此脚本以重置 MachineKey 文件夹的权限,并将 RSA 文件重置为默认值。
再次尝试访问 VM。
运行脚本后,可以检查以下遇到权限问题的文件:
- c:\temp\BeforeScript_permissions.txt
- c:\temp\AfterScript_permissions.txt
续订 RDP 自签名证书
如果问题仍然存在,请运行以下脚本,以确保续订 RDP 自签名证书:
Import-Module PKI
Set-Location Cert:\LocalMachine
$RdpCertThumbprint = 'Cert:\LocalMachine\Remote Desktop\'+((Get-ChildItem -Path 'Cert:\LocalMachine\Remote Desktop\').thumbprint)
Remove-Item -Path $RdpCertThumbprint
Stop-Service -Name "SessionEnv"
Start-Service -Name "SessionEnv"
如果无法续订证书,请按照以下步骤尝试删除证书:
在同一 VNET 中的另一个 VM 上,打开“运行”框,键入 mmc,然后按“确定”。
在“ 文件 ”菜单上,选择“ 添加/删除管理单元”。
在 “可用管理单元 ”列表中,选择“ 证书”,然后选择“ 添加”。
选择“ 计算机帐户”,然后选择“ 下一步”。
选择“ 其他计算机”,然后添加有问题的 VM 的 IP 地址。
注意
尝试使用内部网络来避免使用虚拟 IP 地址。
选择“ 完成”,然后选择“ 确定”。
展开证书,转到“远程桌面\证书”文件夹,右键单击该证书,然后选择“ 删除”。
重启远程桌面配置服务:
net stop SessionEnv net start SessionEnv
注意
此时,如果从 mmc 刷新存储,证书将重新出现。
再次尝试使用 RDP 访问 VM。
更新 TLS/SSL 证书
如果将 VM 设置为使用 TLS/SSL 证书,请运行以下命令以获取指纹。 然后检查它是否与证书的指纹相同:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash
如果不是,请更改指纹:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash /t REG_BINARY /d <CERTIFICATE THUMBPRINT>
还可以尝试删除密钥,以便 RDP 使用 RDP 的自签名证书:
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash
方案 2
事件日志
在 CMD 实例中,运行以下命令,检查过去 24 小时内系统日志中是否记录了 SCHANNEL 错误事件 36871:
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36871 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
日志名称: 系统
源: Schannel
日期: —
事件 ID: 36871
任务类别: 没有
水平: 错误
关键 字:
用户: 系统
Computer:computer
描述: 创建 TLS 服务器凭据时发生严重错误。 内部错误状态为 10013。
原因
此问题是由安全策略引起的。 禁用旧版 TLS ((如 1.0) )时,RDP 访问将失败。
解决方案
RDP 使用 TLS 1.0 作为默认协议。 但是,协议可能会更改为 TLS 1.1,这是新标准。
若要排查此问题,请参阅 排查使用 RDP 连接到 Azure VM 时的身份验证错误。
场景 3
如果已在 VM 上安装远程桌面连接代理角色,检查过去 24 小时内是否存在事件 2056 或事件 1296。 在 CMD 实例中,运行以下命令:
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name=' Microsoft-Windows-TerminalServices-SessionBroker '] and EventID=2056 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name=' Microsoft-Windows-TerminalServices-SessionBroker-Client '] and EventID=1296 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
日志名称: Microsoft-Windows-TerminalServices-SessionBroker/Operational
源: Microsoft-Windows-TerminalServices-SessionBroker
日期:时间
事件 ID: 2056
任务类别: (109)
水平: 错误
关键 字:
用户: 网络服务
Computer:computer fqdn
描述: 找不到源 Microsoft-Windows-TerminalServices-SessionBroker 的事件 ID 2056 的说明。 引发此事件的组件未安装在本地计算机上,或者安装已损坏。 可以在本地计算机上安装或修复该组件。
如果事件源自另一台计算机,则必须随事件一起保存显示信息。
事件中包含以下信息:
NULL
NULL
登录到数据库失败。
日志名称: Microsoft-Windows-TerminalServices-SessionBroker-Client/Operational
源: Microsoft-Windows-TerminalServices-SessionBroker-Client
日期:时间
事件 ID: 1296
任务类别: (104)
水平: 错误
关键 字:
用户: 网络服务
Computer:computer fqdn
描述: 找不到源 Microsoft-Windows-TerminalServices-SessionBroker-Client 的事件 ID 1296 的说明。 引发此事件的组件未安装在本地计算机上,或者安装已损坏。 可以在本地计算机上安装或修复该组件。
如果事件源自另一台计算机,则必须随事件一起保存显示信息。
事件中包含以下信息:
text
text
远程桌面连接代理尚未准备好进行 RPC 通信。
原因
出现此问题的原因是远程桌面连接代理服务器的主机名已更改,这是不支持的更改。
主机名具有Windows 内部数据库的条目和依赖项,远程桌面服务场需要这些条目和依赖项才能正常工作。 在生成场后更改主机名会导致许多错误,并可能导致代理服务器停止工作。
解决方案
若要解决此问题,必须重新安装远程桌面连接代理角色和Windows 内部数据库。
后续步骤
RDP 失败,事件 ID 为 1058 & 事件 36870,使用远程桌面会话主机证书 & SSL 通信
域控制器上的 Schannel 36872 或 Schannel 36870
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈