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

Important

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

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

Note

Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典。 这篇文章介绍了如何使用这两种模型,但 Azure 建议大多数最新部署使用 Resource Manager 模型。

如果对本文中的任何观点存在疑问,可以联系 MSDN Azure 和 CSDN Azure 上的 Azure 专家。 或者,也可以提出 Azure 支持事件。 请转到 Azure 支持站点并单击“获取支持”。 有关使用 Azure 支持的信息,请阅读 Azure 支持常见问题解答

远程桌面连接的组件

以下是 RDP 连接所涉及的组件:

继续前,可能会有助于回想自上次远程桌面成功连接到 VM 后发生的变化。 例如:

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

预备步骤

在继续进行详细故障排除前,

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

详细故障排除步骤

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

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

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

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

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

针对上述所有情况,请暂时禁用可疑软件,并尝试通过远程桌面连接到本地计算机。 如果可以通过这种方式找出实际原因,请与网络管理员合作更正软件设置,以允许远程桌面连接。

来源 2:组织 Intranet 边缘设备

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

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

如果可以与直接连接到 Internet 的计算机建立远程桌面连接,检查组织的 Intranet 边缘设备中是否有以下问题:

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

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

来源 3:云服务终结点和 ACL

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

Note

对于在 Resource Manager 中创建的虚拟机,请跳转到 来源 4:网络安全组

如果同一云服务或虚拟网络中没有其他虚拟机,可自行创建。 遵循在 Azure 中创建运行 Windows 的虚拟机中所述的步骤。 测试完成后,删除测试虚拟机。

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

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

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

来源 4:网络安全组

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

可以查看生效的安全组规则,确保入站“允许”NSG 规则存在并已针对 RDP 端口(默认为 3389)设置优先级。 有关详细信息,请参阅使用有效的安全规则排查 VM 流量流问题

来源 5:基于 Windows 的 Azure VM

请按此文说明执行操作。 本文会重置虚拟机上的远程桌面服务:

  • 启用“远程桌面”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 订阅名称、云服务名称和虚拟机名称(删除 < 和 > 字符),然后运行这些命令。

PowerShell复制
$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.chinacloudapp.cn)。

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

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

输入有效的管理员凭据后,应显示类似以下 Azure PowerShell 提示符的信息:

PowerShell复制
[cloudservice4testing.chinacloudapp.cn]: PS C:\Users\User1\Documents>

此提示的第一部分是包含目标 VM 的云服务名称,可能与于“cloudservice4testing.chinacloudapp.cn”不同。 现在,可对此云服务发出 Azure PowerShell 命令来调查上述问题并更正配置。

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

出现远程 Azure PowerShell 会话提示时,运行此命令。

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

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

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

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

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

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

PowerShell复制
Exit-PSSession

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

其他资源

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

如何安装和配置 Azure PowerShell

对于基于 Linux 的 Azure 虚拟机的 Secure Shell (SSH) 连接进行故障排除

对在 Azure 虚拟机上运行的应用程序的访问进行故障排除                        立即访问http://market.azure.cn

详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题的更多相关文章

  1. 排查在 Azure 中新建 Windows VM 时遇到的部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

  2. 远程桌面连接Windows Azure中的Ubuntu虚拟机

    默认情况下,通过Windows Azure创建的ubuntu虚拟机是不能直接连接远程桌面的,只能通过SSH终端连接. 在Windows Azure Portal中创建Ubuntu虚拟机,创建完成后添加 ...

  3. 排查 Azure 虚拟机的远程桌面连接问题

    与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...

  4. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器

    若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...

  5. Azure 中的 Windows 虚拟机概述

    Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...

  6. 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈

    本教程介绍如何在 Azure 中的 Linux VM 上实现 MongoDB.Express.AngularJS 和 Node.js (MEAN) 堆栈. 通过创建的 MEAN 堆栈,可以在数据库中添 ...

  7. 使用windows远程桌面连接Windows Azure中的Ubuntu虚拟机

    1.创建ubuntu虚拟机,这里同样不再赘述,创建过程和创建Windows虚拟机基本一样,只是登录可以选择密钥注入或者用户名密码(为了方便我选择了用户名密码认证),创建完成后,查看虚拟机详情中的端口信 ...

  8. 【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程

    转自:http://blog.csdn.net/qq754438390/article/details/50042511 亲测,确实是可以.非常感谢原博. 用win7(64位)远程桌面连接linux( ...

  9. windows在远程桌面连接中使用命令行参数

    在此版本的 Windows 中,可以从搜索框("运行"对话框或命令行)启动远程桌面连接,而不是从「开始」菜单启动它. 从"运行"对话框启动远程桌面的步骤 依次单 ...

随机推荐

  1. (转)AIX ODM 简介

    什么是 ODM 原文:https://www.ibm.com/developerworks/cn/aix/library/1105_chenwei_odm/ Windows 的注册表相信大家都知道,是 ...

  2. Java源码安全审查

    最近业务需要出一份Java Web应用源码安全审查报告, 对比了市面上数种工具及其分析结果, 基于结果总结了一份规则库. 本文目录结构如下: 检测工具 FindSecurityBugs 基于class ...

  3. dip,px,sp区别及使用场景

    1.区别 dip(device independent pixels)——设备独立像素:这个和设备硬件有关,一般哦我们为了支持WCGA.HVGA和QVGA推荐使用这个,不依赖于像素.等同于dp. px ...

  4. 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...

  5. linux下统计文本行数的各种方法(一)

    文件test1.txt有17行 方法一: awk '{print NR}' test1.txt | tail -n1

  6. 关于PHP数据库mysql的一些案例

    案例1:查询select 使用php连接数据库class9, 获取数据库的表student中的信息, 然后输出到页面上(用表格套住) <?php header("Content-typ ...

  7. WCF-异步调用和两种客户端形式

    当发布一个服务端之后,客户端可以通过服务端的元数据,用VS2010添加服务引用的方式生成对应的代码.并且可以选择生成相应的异步操作. WCF实现代码,Add操作延时5秒后再返回结果. [Service ...

  8. 制作一个控制台小程序,要求:用户可以在控制到录入学生的姓名,当用户输入quit(不区分大小写)时,程序停止接收用户输入,并且显示出学生个数及姓名

    string name = string.Empty; //定义一个集合来接收学生 List<string> my = new List<string>(); do { Con ...

  9. Toolstrip 工具栏控件

    工具栏是另一种获取应用程序主要功能的常用方法,比起菜单更直观.   Tool strip 控件是由system.Windows.forms.Toolstrip类提供的,作用是创建易于自定义的常用工具栏 ...

  10. RabbitMQ---4、消息确认Ack

    一:消费者确认 消费者确认或者说消费者应答指的是RabbitMQ需要确认消息到底有没有被收到 - 自动应答 boolean autoAck = true; channel.basicConsume(Q ...