Azure 中 Windows VM 的远程桌面连接问题的详细故障排除步骤

本文提供详细的故障排除步骤,用于诊断和修复基于 Windows 的 Azure 虚拟机的复杂远程桌面错误。

重要

若要消除更常见的远程桌面错误,请确保 先阅读远程桌面的基本故障排除文章 ,然后再继续操作。

可能会遇到与 基本远程桌面故障排除指南中所述的任何特定错误消息不类似的远程桌面错误消息。 请按照以下步骤确定远程桌面 (RDP) 客户端无法连接到 Azure VM 上的 RDP 服务的原因。

远程桌面连接的组件

RDP 连接中涉及以下组件:

此图显示了远程桌面 (RDP) 连接中涉及的组件。

在继续操作之前,从心理上回顾自上次成功与 VM 建立远程桌面连接以来更改的内容可能会有所帮助。 例如:

  • VM 的公共 IP 地址或包含 VM 的云服务 (也称为虚拟 IP 地址 VIP) 已更改。 RDP 失败可能是因为 DNS 客户端缓存仍具有为 DNS 名称注册的 旧 IP 地址 。 刷新 DNS 客户端缓存,然后再次尝试连接 VM。 或者尝试直接使用新的 VIP 进行连接。
  • 使用第三方应用程序来管理远程桌面连接,而不是使用Azure 门户生成的连接。 验证应用程序配置是否包含远程桌面流量的正确 TCP 端口。 可以通过单击 VM 的“设置>终结点”,在Azure 门户中为经典虚拟机检查此端口。

初步步骤

在继续详细故障排除之前,

执行这些步骤后,请尝试通过远程桌面重新连接到 VM。

详细的故障排除步骤

由于以下源存在问题,远程桌面客户端可能无法访问 Azure VM 上的远程桌面服务:

源 1:远程桌面客户端计算机

验证计算机是否可以与另一台基于 Windows 的本地计算机建立远程桌面连接。

RDP 连接中的组件示意图,其中突出显示了 RDP 客户端,箭头指向另一个本地计算机,指示连接。

如果不能,检查计算机上以下设置:

  • 阻止远程桌面流量的本地防火墙设置。
  • 本地安装的客户端代理软件阻止远程桌面连接。
  • 本地安装的阻止远程桌面连接的网络监视软件。
  • 其他类型的安全软件,用于监视流量或允许/禁止阻止远程桌面连接的特定类型的流量。

在所有这些情况下,请暂时禁用该软件,并尝试通过远程桌面连接到本地计算机。 如果可以这样找到实际原因,请与网络管理员协作,更正软件设置以允许远程桌面连接。

源 2:组织 Intranet 边缘设备

验证直接连接到 Internet 的计算机是否可以与 Azure 虚拟机建立远程桌面连接。

RDP 连接中的组件示意图,其中突出显示了连接到 Internet 的 RDP 客户端,并突出显示了指向 Azure V M 的箭头,指示连接。

如果没有直接连接到 Internet 的计算机,请在资源组或云服务中使用新的 Azure 虚拟机创建和测试。 有关详细信息,请参阅 在 Azure 中创建运行 Windows 的虚拟机。 可以在测试后删除虚拟机和资源组或云服务。

如果可以使用直接连接到 Internet 的计算机创建远程桌面连接,检查组织 Intranet 边缘设备,以便:

  • 阻止 HTTPS 连接到 Internet 的内部防火墙。
  • 阻止远程桌面连接的代理服务器。
  • 在阻止远程桌面连接的边缘网络中的设备上运行的入侵检测或网络监视软件。

请与网络管理员协作,更正组织的 Intranet 边缘设备的设置,以允许与 Internet 建立基于 HTTPS 的远程桌面连接。

源 3:云服务终结点和 ACL

重要

经典 VM 将于 2023 年 9 月 1 日停用

如果使用 ASM 中的 IaaS 资源,请在 2023 年 9 月 1 日前完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器 中的许多功能增强功能。

有关详细信息,请参阅在 2023 年 9 月 1 日前将 IaaS 资源迁移到 Azure 资源管理器

对于使用经典部署模型创建的 VM,请验证同一云服务或虚拟网络中的另一个 Azure VM 是否可以与 Azure VM 建立远程桌面连接。

RDP 连接中的组件示意图,其中突出显示了一个 Azure V M,一个箭头指向同一云服务中的另一个 Azure V M,指示连接。

注意

对于在 资源管理器 中创建的虚拟机,请跳到源 4:网络安全组

如果同一云服务或虚拟网络中没有另一个虚拟机,请创建一个。 按照在 Azure 中创建运行 Windows 的虚拟机中的步骤操作。 测试完成后删除测试虚拟机。

如果可以通过远程桌面连接到同一云服务或虚拟网络中的虚拟机,检查以下设置:

  • 目标 VM 上远程桌面流量的终结点配置:终结点的专用 TCP 端口必须与 VM 的远程桌面服务侦听的 TCP 端口匹配, (默认值为 3389) 。
  • 目标 VM 上远程桌面流量终结点的 ACL:ACL 允许基于 Internet 的源 IP 地址指定允许或拒绝来自 Internet 的传入流量。 配置错误的 ACL 可能会阻止传入终结点的远程桌面流量。 检查 ACL,确保允许来自代理或其他边缘服务器的公共 IP 地址的传入流量。 有关详细信息,请参阅什么是网络访问控制列表 (ACL) ?

若要检查终结点是否是问题的根源,请删除当前终结点并创建一个新终结点,为外部端口号选择 49152-65535 范围内的随机端口。 有关详细信息,请参阅 如何设置虚拟机的终结点

源 4:网络安全组

网络安全组允许更精细地控制允许的入站和出站流量。 可以在 Azure 虚拟网络中创建跨子网和云服务的规则。

使用 IP 流验证 确认网络安全组中的规则是否阻止了传入或传出虚拟机的流量。 还可以查看有效的安全组规则,以确保存在入站“允许”NSG 规则,并优先处理 RDP 端口 (默认 3389) 。 有关详细信息,请参阅 使用有效安全规则对 VM 流量流进行故障排除

源 5:基于 Windows 的 Azure VM

RDP 连接中的组件关系图,其中突出显示了云服务中的 Azure V M,并显示一条消息,指出它可能是问题的根源。

按照 本文中的说明进行操作。 本文将重置虚拟机上的远程桌面服务:

  • (TCP 端口 3389) 启用“远程桌面”Windows 防火墙默认规则。
  • 通过将 HKLM\System\CurrentControlSet\Control\Terminal Server\fDenyTSConnections 注册表值设置为 0 来启用远程桌面连接。

再次尝试从计算机进行连接。 如果仍无法通过远程桌面进行连接,检查以下可能的问题:

  • 远程桌面服务未在目标 VM 上运行。
  • 远程桌面服务未侦听 TCP 端口 3389。
  • Windows 防火墙或其他本地防火墙具有阻止远程桌面流量的出站规则。
  • 在 Azure 虚拟机上运行的入侵检测或网络监视软件正在阻止远程桌面连接。

对于使用经典部署模型创建的 VM,可以使用与 Azure 虚拟机的远程Azure PowerShell会话。 首先,需要为虚拟机的托管云服务安装证书。 转到配置对 Azure 虚拟机的安全远程 PowerShell 访问,并将 InstallWinRMCertAzureVM.ps1 脚本文件下载到本地计算机。

接下来,安装 Azure PowerShell(如果尚未安装)。 请参阅如何安装和配置Azure PowerShell

接下来,打开Azure PowerShell命令提示符,将当前文件夹更改为 InstallWinRMCertAzureVM.ps1 脚本文件的位置。 若要运行Azure PowerShell脚本,必须设置正确的执行策略。 运行 Get-ExecutionPolicy 命令以确定当前策略级别。 有关设置适当级别的信息,请参阅 Set-ExecutionPolicy

接下来,填写 Azure 订阅名称、云服务名称和虚拟机名称, (删除 <) 和 > 字符,然后运行这些命令。

$subscr="<Name of your Azure subscription>"
$serviceName="<Name of the cloud service that contains the target virtual machine>"
$vmName="<Name of the target virtual machine>"
.\InstallWinRMCertAzureVM.ps1 -SubscriptionName $subscr -ServiceName $serviceName -Name $vmName

可以从 Get-AzureSubscription 命令显示的 SubscriptionName 属性获取正确的订阅名称。 可以从 Get-AzureVM 命令显示的“ServiceName”列获取虚拟机的云服务名称。

检查是否有新证书。 打开当前用户的“证书”管理单元,并在 “受信任的根证书颁发机构\证书” 文件夹中查找。 在“颁发给”列中,应看到一个证书,其中包含云服务的 DNS 名称, (示例:cloudservice4testing.cloudapp.net) 。

接下来,使用以下命令启动远程Azure PowerShell会话。

$uri = Get-AzureWinRMUri -ServiceName $serviceName -Name $vmName
$creds = Get-Credential
Enter-PSSession -ConnectionUri $uri -Credential $creds

输入有效的管理员凭据后,应会看到类似于以下Azure PowerShell提示:

[cloudservice4testing.cloudapp.net]: PS C:\Users\User1\Documents>

此提示的第一部分是包含目标 VM 的云服务名称,该名称可能不同于“cloudservice4testing.cloudapp.net”。 现在可以为此云服务发出Azure PowerShell命令,以调查提到的问题并更正配置。

手动更正远程桌面服务侦听 TCP 端口

在远程Azure PowerShell会话提示符下,运行以下命令。

Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"

PortNumber 属性显示当前端口号。 如果需要,请使用此命令将远程桌面端口号更改回默认值 (3389) 。

Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber" -Value 3389

使用此命令验证端口是否已更改为 3389。

Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"

使用此命令退出远程Azure PowerShell会话。

Exit-PSSession

验证 Azure VM 的远程桌面终结点是否也使用 TCP 端口 3398 作为其内部端口。 重启 Azure VM,然后再次尝试远程桌面连接。

其他资源

如何重置 Windows 虚拟机的密码或远程桌面服务

如何安装和配置 Azure PowerShell

排查与基于 Linux 的 Azure 虚拟机 (SSH) 连接的安全外壳问题

排查对 Azure 虚拟机上运行的应用程序的访问问题

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。