使用 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

故障排除

  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):检查符合 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 反馈社区