常见远程桌面连接故障排除
尝试我们的虚拟代理 -它可以帮助你快速识别和修复常见的 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 <computer name> /H c:\gpresult-<computer name>.html
此命令生成的文件 (gpresult-<computer name>.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 <computer name>
输入
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:\<filename>.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\<listener>
。如果 PortNumber 的值不是 3389,请将其更改为 3389。
重要
可以使用另一个端口来操作远程桌面服务。 但是,我们不建议这样做。 本文不介绍如何排查该类配置的问题。
更改端口号后,重启“远程桌面服务”服务。
检查另一个应用程序是否未尝试使用同一端口
请使用具有管理权限的 PowerShell 实例完成此过程。 对于本地计算机,还可以使用具有管理权限的命令提示符。 但是,此过程使用 PowerShell,因为同一 cmdlet 可以通过本地和远程方式运行。
打开 PowerShell 窗口。 若要连接到远程计算机,请输入
Enter-PSSession -ComputerName <computer name>
。输入以下命令:
cmd /c 'netstat -ano | find "3389"'
查找状态为“正在监听”的 TCP 端口 3389(或分配的 RDP 端口)条目 。
注意
使用该端口的进程或服务的进程标识符 (PID) 显示在 PID 列下。
若要确定哪个应用程序正在使用端口 3389(或分配的 RDP 端口),请输入以下命令:
cmd /c 'tasklist /svc | find "<pid listening on 3389>"'
查找与端口(来自
netstat
输出)关联的 PID 编号的条目。 右列会显示与该 PID 关联的服务或进程。如果远程桌面服务(TermServ.exe)以外的应用程序或服务正在使用端口,则可以使用以下方法之一解决冲突:
- 将该应用程序或服务配置为使用其他端口(建议)。
- 卸载该应用程序或服务。
- 将 RDP 配置为使用其他端口,然后重启“远程桌面服务”服务(不建议)。
检查防火墙是否正在阻止 RDP 端口
使用该工具 psping
测试是否可以使用端口 3389 访问受影响的计算机。
转到不受影响并下载 psping 的其他计算机。
以管理员身份打开命令提示符窗口,更改为安装的
psping
目录,然后输入以下命令:psping -accepteula <computer IP>:3389
检查命令的
psping
输出以获取如下所示的结果:Connecting to \<computer IP\>
:远程计算机可访问。(0% loss)
:所有尝试连接都成功。The remote computer refused the network connection
:无法访问远程计算机。(100% loss)
:所有尝试连接都失败。
在多台计算机上运行
psping
,以测试其连接到受影响计算机的能力。请注意受影响的计算机是阻止了来自所有其他计算机的连接、来自某些其他计算机的连接,还是仅来自其他一台计算机的连接。
建议的后续步骤:
- 咨询网络管理员,验证网络是否允许 RDP 流量传输到受影响的计算机。
- 调查源计算机与受影响计算机之间的任何防火墙配置(包括受影响计算机上的 Windows 防火墙),以确定防火墙是否正在阻止 RDP 端口。