详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题
本文提供详细的故障排除步骤,用于为基于 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 的“设置”>“终结点”来检查经典虚拟机的此端口。
预备步骤
在继续进行详细故障排除前,
- 在 Azure 门户中检查虚拟机的状态,查看是否存在任何明显问题。
- 按照 基本故障排除指南中常见 RDP 错误的快速修复步骤进行操作。
在执行这些步骤后,尝试通过远程桌面重新连接到 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 订阅名称、云服务名称和虚拟机名称(删除 < 和 > 字符),然后运行这些命令。
$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 会话。
$uri = Get-AzureWinRMUri -ServiceName $serviceName -Name $vmName
$creds = Get-Credential
Enter-PSSession -ConnectionUri $uri -Credential $creds
输入有效的管理员凭据后,应显示类似以下 Azure PowerShell 提示符的信息:
[cloudservice4testing.chinacloudapp.cn]: PS C:\Users\User1\Documents>
此提示的第一部分是包含目标 VM 的云服务名称,可能与于“cloudservice4testing.chinacloudapp.cn”不同。 现在,可对此云服务发出 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,并重新尝试远程桌面连接。
其他资源
对于基于 Linux 的 Azure 虚拟机的 Secure Shell (SSH) 连接进行故障排除
对在 Azure 虚拟机上运行的应用程序的访问进行故障排除 立即访问http://market.azure.cn
详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题的更多相关文章
- 排查在 Azure 中新建 Windows VM 时遇到的部署问题
尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...
- 远程桌面连接Windows Azure中的Ubuntu虚拟机
默认情况下,通过Windows Azure创建的ubuntu虚拟机是不能直接连接远程桌面的,只能通过SSH终端连接. 在Windows Azure Portal中创建Ubuntu虚拟机,创建完成后添加 ...
- 排查 Azure 虚拟机的远程桌面连接问题
与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...
- 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器
若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...
- Azure 中的 Windows 虚拟机概述
Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...
- 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈
本教程介绍如何在 Azure 中的 Linux VM 上实现 MongoDB.Express.AngularJS 和 Node.js (MEAN) 堆栈. 通过创建的 MEAN 堆栈,可以在数据库中添 ...
- 使用windows远程桌面连接Windows Azure中的Ubuntu虚拟机
1.创建ubuntu虚拟机,这里同样不再赘述,创建过程和创建Windows虚拟机基本一样,只是登录可以选择密钥注入或者用户名密码(为了方便我选择了用户名密码认证),创建完成后,查看虚拟机详情中的端口信 ...
- 【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程
转自:http://blog.csdn.net/qq754438390/article/details/50042511 亲测,确实是可以.非常感谢原博. 用win7(64位)远程桌面连接linux( ...
- windows在远程桌面连接中使用命令行参数
在此版本的 Windows 中,可以从搜索框("运行"对话框或命令行)启动远程桌面连接,而不是从「开始」菜单启动它. 从"运行"对话框启动远程桌面的步骤 依次单 ...
随机推荐
- Sublime Text 3新建工程
1. 创建工程 Project > Add Folder to Project 这时在sidebar中将出现刚刚添加的文件目录,如果还需要添加其他目录,则重复这一操作即可. 2. 保存工程 Pr ...
- 完美原创:centos7.1 从源码升级安装Python3.5.2
(原创)完美原创:centos7.1 从源码升级安装Python3.5.2 下载Python3.5.2源码:https://www.python.org/downloads/release/pytho ...
- hibernate3.3.2搭建Junit日志环境
搭建好log4j日志环境后,再来搭建Junit测试环境: 测试代码放在另外一个目录下,项目右键,new一个source folder,源代码目录,放我们的测试代码,名字test.src放源代码. 比较 ...
- 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)
不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的 ...
- Office 的下载、安装和激活(图文详细)
不多说,直接上干货! 在这里,推荐一个很好的网址,http://www.itellyou.cn/ 销售渠道不同,激活通道也不同.有零售版,有大客户版.零售的用零售密钥激活,一对一. SW开头或在中间有 ...
- FS及CacheFS类解读
Javac中有FSInfo与CacheFSInfo两个类,CacheFSInfo继承了FSInfo类,这两个类的主要功能就是通过map缓存Jar文件,核心代码如下: private Map<Fi ...
- k8s中secret解析
概览 Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥.这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险. ...
- Delphi下OpenGL2d绘图(04)-画四边形
一.前言 画四边形基本上与前几遍文字代码是相同.区别在于glBegin()的参数“GL_QUADS”.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 ...
- laravel5.4学习--laravel目录结构
Laravel目录结构分析 app目录:主要是存放自己开发的应用代码(里面主要书写 控制器和模型和路由文件) bootstrap目录:laravel启动目录 config目录:主要是存放配置文件信息 ...
- C# SocketUdpServer
public interface ISocketUdpServer { void Start(); void Stop(); int SendData(byte[] data, IPEndPoint ...