尝试我们的虚拟代理 -它可以帮助你快速识别和修复常见的 RD 会话连接问题

如果远程桌面客户端无法连接到远程桌面,但未提供可帮助识别原因的消息或其他症状,请使用以下步骤。

检查 RDP 协议的状态

检查本地计算机上 RDP 协议的状态

若要检查和更改本地计算机上 RDP 协议的状态,请参阅如何启用远程桌面。

注意

如果远程桌面选项不可用,请参阅检查组策略对象是否正在阻止 RDP。

检查远程计算机上 RDP 协议的状态

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 若要进行保护,请先备份注册表,然后再对其进行修改,以便在出现问题时还原它。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。

若要检查和更改远程计算机上 RDP 协议的状态,请使用网络注册表连接:

首先转到“开始”菜单,然后选择“运行” 。 在出现的文本框中,输入“regedt32”。

在注册表编辑器中选择“文件”,然后选择“连接网络注册表”。

在“选择计算机”对话框中输入远程计算机的名称,然后依次选择“检查名称”、“确定”。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server导航到和转到 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services。

如果 fDenyTSConnections 项的值为 0,则表明已启用 RDP。

如果 fDenyTSConnections 项的值为 1,则表明已禁用 RDP。

若要启用 RDP,请将 fDenyTSConnections 的值从 1 更改为 0。

检查组策略对象 (GPO) 是否正在阻止本地计算机上的 RDP

如果无法在用户界面中启用 RDP,或者在更改 fDenyTSConnections 的值后该值恢复为 1,则表明某个 GPO 可能取代了计算机级别的设置。

若要检查本地计算机上的组策略配置,请以管理员身份打开命令提示符窗口,然后输入以下命令:

gpresult /H c:\gpresult.html

完成此命令后,打开 gpresult.html。 在“计算机配置”\“管理模板”\“Windows 组件”\“远程桌面服务”\“远程桌面会话主机”\“连接”中,找到“允许用户通过使用远程桌面服务进行远程连接”策略。

如果此策略的设置为“启用”,则表明组策略未阻止 RDP 连接。

如果此策略的设置为“已禁用”,请检查“入选的 GPO”。 正在此 GPO 在阻止 RDP 连接。

检查 GPO 是否正在阻止远程计算机上的 RDP

若要检查远程计算机上的组策略配置,所用的命令基本上与本地计算机相同:

gpresult /S /H c:\gpresult-.html

此命令生成的文件 (gpresult-.html) 使用的信息格式与本地计算机版本 (gpresult.html) 使用的格式相同。

修改阻止 GPO

可以在组策略对象编辑器 (GPE) 和组策略管理控制台 (GPM) 中修改这些设置。 有关如何使用组策略的详细信息,请参阅高级组策略管理。

若要修改阻止策略,请使用以下方法之一:

在 GPE 中访问 GPO 的相应级别(例如本地或域),然后导航到“计算机配置”>“管理模板”>“Windows 组件”>“远程桌面服务”>“远程桌面会话主机”>“连接”>“允许用户通过使用远程桌面服务进行远程连接”。

将策略设置为“启用”或“不配置”。

在受影响的计算机上,以管理员身份打开命令提示符窗口,然后运行 gpupdate /force 该命令。

在 GPM 中,导航到其中的阻止策略已应用到受影响计算机的组织单位 (OU),并从此 OU 中删除该策略。

检查 RDP 服务的状态

在本地(客户端)计算机和远程(目标)计算机上,以下服务应该正在运行:

远程桌面服务 (TermService)

远程桌面服务用户模式端口重定向程序 (UmRdpService)

可以使用“服务”MMC 管理单元在本地或远程管理这些服务。 还可以通过本地或远程方式使用 PowerShell 来管理服务(如果远程计算机配置为接受远程 PowerShell cmdlet)。

在任一计算机上,如果上述一个或两个服务未运行,请启动它们。

注意

如果启动远程桌面服务服务,请选择“是”以自动重启远程桌面服务 UserMode 端口重定向程序服务。

检查 RDP 侦听器是否正常运行

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 若要进行保护,请先备份注册表,然后再对其进行修改,以便在出现问题时还原它。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。

检查 RDP 侦听器的状态

请使用具有管理权限的 PowerShell 实例完成此过程。 对于本地计算机,还可以使用具有管理权限的命令提示符。 但是,此过程使用 PowerShell,因为同一 cmdlet 可以通过本地和远程方式运行。

若要连接到远程计算机,请运行以下 cmdlet:

Enter-PSSession -ComputerName

输入 qwinsta。

如果列表包含 rdp-tcp 状态 Listen为 ,则 RDP 侦听器正在运行。 继续检查 RDP 侦听器端口。 否则,请继续执行步骤 4。

从工作计算机导出 RDP 侦听器配置。

登录到操作系统版本与受影响计算机的操作系统版本相同的计算机,并访问该计算机的注册表(例如,通过使用注册表编辑器)。

导航到以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

将条目导出到 .reg 文件。 例如,在注册表编辑器中,右键单击该项,选择“导出”,然后输入所导出设置的文件名。

将导出 .reg 的文件复制到受影响的计算机。

若要导入 RDP 侦听器配置,请在受影响的计算机上打开具有管理权限的 PowerShell 窗口(或打开 PowerShell 窗口并远程连接到受影响的计算机)。

若要备份现有的注册表项,请输入以下 cmdlet:

cmd /c 'reg export "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp" C:\Rdp-tcp-backup.reg'

若要删除现有的注册表项,请输入以下 cmdlet:

Remove-Item -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp' -Recurse -Force

若要导入新的注册表项并重启服务,请输入以下 cmdlet:

cmd /c 'regedit /s c:\.reg'

Restart-Service TermService -Force

将文件名>替换为<导出.reg的文件的名称。

通过再次尝试远程桌面连接来测试配置。 如果仍然无法连接,请重启受影响的计算机。

如果仍然无法连接,请检查 RDP 自签名证书的状态。

检查 RDP 自签名证书的状态

如果仍然无法连接,请打开“证书”MMC 管理单元。 根据提示选择要管理的证书存储,选择“计算机帐户”,然后选择受影响的计算机。

在“远程桌面”下的“证书”文件夹中,删除 RDP 自签名证书。

在受影响的计算机上,重启“远程桌面服务”服务。

刷新“证书”管理单元。

如果尚未重新创建 RDP 自签名证书,请检查 MachineKeys 文件夹的权限。

检查 MachineKeys 文件夹的权限

在受影响的计算机上打开“资源管理器”,然后导航到 C:\ProgramData\Microsoft\Crypto\RSA\。

右键单击 MachineKeys,选择“属性>安全性>高级”。

确保已配置以下权限:

Builtin\Administrators: 完全控制

每个人: 读取、 写入

检查 RDP 侦听器端口

在本地(客户端)计算机和远程(目标)计算机上,RDP 侦听器应在端口 3389 上运行。 不应有任何其他应用程序正在使用此端口。

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 若要进行保护,请先备份注册表,然后再对其进行修改,以便在出现问题时还原它。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表。

若要检查或更改 RDP 端口,请使用注册表编辑器:

转到“开始”菜单,选择“运行” ,然后将 regedt32 输入显示的文本框中。

若要连接到远程计算机,请依次选择“文件”、“连接网络注册表”。

在“选择计算机”对话框中输入远程计算机的名称,然后依次选择“检查名称”、“确定”。

打开注册表并导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\

如果 PortNumber 的值不是 3389,请将其更改为 3389。

重要

可以使用另一个端口来操作远程桌面服务。 但是,我们不建议这样做。 本文不介绍如何排查该类配置的问题。

更改端口号后,重启“远程桌面服务”服务。

检查另一个应用程序是否未尝试使用同一端口

请使用具有管理权限的 PowerShell 实例完成此过程。 对于本地计算机,还可以使用具有管理权限的命令提示符。 但是,此过程使用 PowerShell,因为同一 cmdlet 可以通过本地和远程方式运行。

打开 PowerShell 窗口。 若要连接到远程计算机,请输入 Enter-PSSession -ComputerName

输入以下命令:

cmd /c 'netstat -ano | find "3389"'

查找状态为“正在监听”的 TCP 端口 3389(或分配的 RDP 端口)条目 。

注意

使用该端口的进程或服务的进程标识符 (PID) 显示在 PID 列下。

若要确定哪个应用程序正在使用端口 3389(或分配的 RDP 端口),请输入以下命令:

cmd /c 'tasklist /svc | find ""'

查找与端口(来自 netstat 输出)关联的 PID 编号的条目。 右列会显示与该 PID 关联的服务或进程。

如果远程桌面服务(TermServ.exe)以外的应用程序或服务正在使用端口,则可以使用以下方法之一解决冲突:

将该应用程序或服务配置为使用其他端口(建议)。

卸载该应用程序或服务。

将 RDP 配置为使用其他端口,然后重启“远程桌面服务”服务(不建议)。

检查防火墙是否正在阻止 RDP 端口

使用该工具 psping 测试是否可以使用端口 3389 访问受影响的计算机。

转到不受影响并下载 psping 的其他计算机。

以管理员身份打开命令提示符窗口,更改为安装的 psping目录,然后输入以下命令:

psping -accepteula :3389

检查命令的 psping 输出以获取如下所示的结果:

Connecting to \:远程计算机可访问。

(0% loss):所有尝试连接都成功。

The remote computer refused the network connection:无法访问远程计算机。

(100% loss):所有尝试连接都失败。

在多台计算机上运行 psping ,以测试其连接到受影响计算机的能力。

请注意受影响的计算机是阻止了来自所有其他计算机的连接、来自某些其他计算机的连接,还是仅来自其他一台计算机的连接。

建议的后续步骤:

咨询网络管理员,验证网络是否允许 RDP 流量传输到受影响的计算机。

调查源计算机与受影响计算机之间的任何防火墙配置(包括受影响计算机上的 Windows 防火墙),以确定防火墙是否正在阻止 RDP 端口。