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

适用于:✔️ Windows VM

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

重要

要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章,再继续。

可能遇到不像基本远程桌面故障排除指南中所述的任何特定错误消息的远程桌面错误消息。 请遵循以下步骤来确定远程桌面 (RDP) 客户端为何无法连接到 Azure VM 上的 RDP 服务。

远程桌面连接的组件

RDP 连接涉及以下组件:

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

在继续之前,在脑海中回想一下自上次远程桌面成功连接到 VM 后更改的内容可能会有帮助。 例如:

  • VM 或包含 VM 的云服务的公共 IP 地址(也称为虚拟 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 边缘设备中是否有以下项:

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

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

源 3:网络安全组

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

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

源 4:基于 Windows 的 Azure VM

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

请按此文说明执行操作。 此文介绍如何在虚拟机上重置远程桌面服务:

  • 启用“远程桌面”Windows 防火墙默认规则(TCP 端口 3389)。
  • 通过将 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 虚拟机的 Secure Shell (SSH) 连接进行故障排除

对 Azure 虚拟机上运行的应用程序的访问进行故障排除

联系我们寻求帮助

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