使用 RDP 连接到 Azure VM 时排查身份验证错误
适用于:✔️ Windows VM
你可通过本文解决使用远程桌面协议 (RDP) 连接来连接到 Azure 虚拟机 (VM) 时出现的身份验证错误。
注意
本文有帮助吗? 你的输入对我们很重要。 请使用此页上的 “反馈 ”按钮告诉我们本文为你工作得有多好,或者我们如何改进它。
现象
捕获 Azure VM 的屏幕截图,其中显示了欢迎屏幕并指示操作系统正在运行。 但是,尝试使用远程桌面连接连接到 VM 时,会收到以下错误消息之一:
- 发生身份验证错误。 无法联系本地安全机构。
- 你尝试连接到的远程计算机需要网络级别身份验证 (NLA),但无法联系 Windows 域控制器来执行 NLA。 如果你是远程计算机的管理员,则可使用“系统属性”对话框的“远程”选项卡上的选项禁用 NLA。
- 此计算机无法连接到远程计算机。 再次尝试连接,如果问题仍然存在,请与远程计算机的所有者或网络管理员联系。
原因
NLA 可能会阻止 RDP 访问 VM 的原因有多种:
- VM 无法与域控制器 (DC) 通信。 此问题可能会阻止 RDP 会话使用域凭据访问 VM。 但是,你仍可以使用本地管理员凭据登录。 在以下情况下可能会出现此问题:
- 此 VM 与 DC 之间的 Active Directory 安全通道已损坏。
- VM 的帐户密码为旧副本,而 DC 的为新副本。
- 此 VM 连接的 DC 运行不正常。
- VM 的加密级别高于客户端计算机使用的加密级别。
- VM 上禁用了 TLS 1.0、1.1 或 1.2(服务器)协议。 VM 已设置为使用域凭据禁用登录,并且本地安全机构 (LSA) 设置不正确。
- VM 被设置为仅接受符合美国联邦信息处理标准 (FIPS) 的算法连接。 这通常通过使用 Active Directory 策略来完成。 这是一种罕见的配置,但只能对远程桌面连接强制执行 FIPS。
在进行故障排除之前
创建备份快照
要创建备份快照,请执行创建磁盘快照中的步骤。
远程连接到 VM
若要远程连接到 VM,请使用如何使用远程工具来解决 Azure VM 问题中的方法。
组策略客户端服务
如果这是加入域的 VM,请首先停止组策略客户端服务,以防止任何 Active Directory 策略覆盖更改。 为此,请运行以下命令:
REM Disable the member server to retrieve the latest GPO from the domain upon start
REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
解决问题后,还原此 VM 与域联系以从域中检索最新 GPO 的功能。 为此,请运行以下命令:
sc config gpsvc start= auto
sc start gpsvc
gpupdate /force
如果已还原更改,则表示是 Active Directory 策略导致的问题。
解决方法
作为连接到 VM 并解决原因的解决方法,可以暂时禁用 NLA。 若要禁用 NLA,请使用以下命令,或使用DisableNLA
运行命令中的脚本。
REM Disable the Network Level Authentication
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0
然后,重启 VM,然后转到故障排除部分。
解决重新启用 NLA 的问题后,运行以下命令,然后重启 VM:
REG add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v disabledomaincreds /t REG_DWORD /d 0 /f
REG add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
故障排除
对已加入域的 VM 进行故障排除
若要解决此问题,请执行以下操作:
- 检查 VM 是否可以连接到 DC。
- 检查 DC 的运行状况。
注意
若要测试 DC 运行状况,可以使用位于同一 VNET、子网中的另一个 VM,并使用同一登录服务器。
根据“远程连接到 VM”部分中的步骤,使用串行控制台、远程 CMD 或远程 PowerShell 连接到有问题的 VM。
确定 VM 尝试连接到的 DC。在控制台中运行以下命令:
set | find /i "LOGONSERVER"
测试 VM 与 DC 之间的安全通道的运行状况。 为此,请在
Test-ComputerSecureChannel
提升的 PowerShell 实例中运行命令。 此命令返回 True 或 False,指示安全通道是否处于活动状态:Test-ComputerSecureChannel -verbose
如果通道损坏,请运行以下命令进行修复:
Test-ComputerSecureChannel -repair
确保在 VM 和 DC 上更新 Active Directory 中的计算机帐户密码:
Reset-ComputerMachinePassword -Server "<COMPUTERNAME>" -Credential <DOMAIN CREDENTIAL WITH DOMAIN ADMIN LEVEL>
如果 DC 和 VM 之间的通信良好,但 DC 的运行状况不佳而无法打开 RDP 会话,则可以尝试重启 DC。
如果上述命令未能修复到域的通信问题,则可以将此 VM 重新加入域。 为此,请按照下列步骤进行操作:
使用以下内容创建名为 Unjoin.ps1 的脚本,然后将脚本部署为Azure 门户上的自定义脚本扩展:
cmd /c "netdom remove <<MachineName>> /domain:<<DomainName>> /userD:<<DomainAdminhere>> /passwordD:<<PasswordHere>> /reboot:10 /Force"
此脚本强行从域中删除 VM,并在 10 秒后重启 VM。 然后,需要清理域端的 Computer 对象。
清理完成后,将此 VM 重新加入域。 为此,请使用以下内容创建名为 JoinDomain.ps1 的脚本,然后将脚本部署为Azure 门户上的自定义脚本扩展:
cmd /c "netdom join <<MachineName>> /domain:<<DomainName>> /userD:<<DomainAdminhere>> /passwordD:<<PasswordHere>> /reboot:10"
注意
这将使用指定的凭据加入域上的 VM。
如果 Active Directory 通道处于正常状态,计算机密码已更新,并且域控制器按预期工作,请尝试以下步骤。
如果问题仍然存在,请检查域凭据是否已禁用。 为此,请打开提升的命令提示符窗口,然后运行以下命令以确定 VM 是否已设置为禁用用于登录 VM 的域帐户:
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v disabledomaincreds
如果此项设置为“1”,则表示服务器已设置为不允许使用域凭据。 请将此项更改为“0”。
排查独立 VM 问题
检查 MinEncryptionLevel
在 CMD 实例中,运行以下命令以查询 MinEncryptionLevel 注册表值:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel
根据注册表值,按照下列步骤操作:
4 (FIPS):检查符合 FIP 的算法连接。
3(128 位加密):通过运行以下命令将严重性设置为“2”:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 2 /f
2(可能的最高加密,由客户端指定):你可以尝试通过运行以下命令将加密设置为最小值“1”:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 1 /f
重启 VM,使对注册表的更改生效。
TLS 版本
根据系统,RDP 使用 TLS 1.0、1.1 或 1.2(服务器)协议。 要查询在 VM 上如何设置这些协议,请打开 CMD 实例,然后运行以下命令:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled
如果返回值不全是“1”,则表示协议已禁用。 要启用这些协议,请运行以下命令:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
对于其他协议版本,可运行以下命令:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS x.x\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS x.x\Server" /v Enabled
注意
从来宾操作系统日志获取 SCHANNEL 错误的 SSH/TLS 版本 x.x.
检查符合 FIP 的算法连接
可以强制执行远程桌面以仅使用符合 FIP 的算法连接。 可使用注册表项设置该操作。 为此,请打开提升的命令提示符窗口,然后查询以下项:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy" /v Enabled
如果该命令返回“1”,请将注册表值更改为“0”。
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy" /v Enabled /t REG_DWORD /d 0
检查 VM 上的当前 MinEncryptionLevel :
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel
如果该命令返回“4”,请将注册表值更改为“2”
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 2
重启 VM,使对注册表的更改生效。
后续步骤
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。