排查使用 RDP 连接到 Azure VM 时的身份验证错误

本文可帮助排查使用远程桌面协议 (RDP) 连接连接到 Azure 虚拟机 (VM) 时发生的身份验证错误。

注意

本文是否有帮助? 你的输入对我们很重要。 请使用此页面上的 “反馈 ”按钮,让我们了解本文对你的影响,或者我们如何改进它。

症状

捕获 Azure VM 的屏幕截图,其中显示了“欢迎”屏幕并指示操作系统正在运行。 但是,尝试使用远程桌面连接连接到 VM 时,会收到以下错误消息之一:

  • 发生了身份验证错误。 无法联系本地安全机构。
  • 你尝试连接的远程计算机需要网络级别身份验证 (NLA) ,但无法联系你的 Windows 域控制器来执行 NLA。 如果你是远程计算机上的管理员,则可以使用“系统属性”对话框的“远程”选项卡上的选项禁用 NLA。
  • 此计算机无法连接到远程计算机。 如果问题仍然存在,请再次尝试连接,请与远程计算机的所有者或网络管理员联系。

原因

NLA 可能会阻止对 VM 的 RDP 访问有多种原因:

  • 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,并转到故障排除部分。

解决问题后,请运行以下命令,然后重启 VM,重新启用 NLA:

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

疑难解答

  1. 排查已加入域的 VM 问题。
  2. 排查独立 VM 问题。

排查已加入域的 VM 问题

若要排查此问题,请执行以下操作:

  1. 检查 VM 是否可以连接到 DC。
  2. 检查 DC 的运行状况。

注意

若要测试 DC 运行状况,可以使用位于同一 VNET、子网中的另一个 VM,并使用同一登录服务器。

根据远程连接到 VM 部分中的步骤 ,使用串行控制台、远程 CMD 或远程 PowerShell 连接到有问题的 VM

  1. 确定 VM 尝试连接到的 DC。在控制台中运行以下命令:

    set | find /i "LOGONSERVER"
    
  2. 测试 VM 和 DC 之间的安全通道的运行状况。 为此,请在 Test-ComputerSecureChannel 提升的 PowerShell 实例中运行 命令。 此命令返回 True 或 False,指示安全通道是否处于活动状态:

    Test-ComputerSecureChannel -verbose
    

    如果通道中断,请运行以下命令来修复它:

    Test-ComputerSecureChannel -repair
    
  3. 确保在 VM 和 DC 上更新 Active Directory 中的计算机帐户密码:

    Reset-ComputerMachinePassword -Server "<COMPUTERNAME>" -Credential <DOMAIN CREDENTIAL WITH DOMAIN ADMIN LEVEL>
    

如果 DC 与 VM 之间的通信良好,但 DC 运行不正常,无法打开 RDP 会话,可以尝试重启 DC。

如果上述命令未解决到域的通信问题,则可以将此 VM 重新加入域。 为此,请按照下列步骤操作:

  1. 使用以下内容创建名为 Unjoin.ps1 的脚本,然后将该脚本部署为 Azure 门户 上的自定义脚本扩展

    cmd /c "netdom remove <<MachineName>> /domain:<<DomainName>> /userD:<<DomainAdminhere>> /passwordD:<<PasswordHere>> /reboot:10 /Force"
    

    此脚本会强行从域中删除 VM,并在 10 秒后重启 VM。 然后,需要清理域端的 Computer 对象。

  2. 清理完成后,将此 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) :检查 FIPs 符合算法连接。

  • 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 错误的来宾 OS 日志中获取 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 反馈社区提交产品反馈。