常规远程桌面连接故障排除

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

当远程桌面客户端无法连接到远程桌面,但未提供有助于确定原因的消息或其他症状时,请使用这些步骤。

检查 RDP 协议的状态

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

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

注意

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

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

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

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

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

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

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

  4. 导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal ServerHKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services

    注册表编辑器的屏幕截图,其中显示了 fDenyTSConnections 条目。

    • 如果 fDenyTSConnections 键的值为 0,则启用 RDP。
    • 如果 fDenyTSConnections 键的值为 1,则禁用 RDP。
  5. 若要启用 RDP,请将 fDenyTSConnections 的值从 1 更改为 0

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

如果无法在用户界面中打开 RDP,或者 fDenyTSConnections 的值在更改后恢复为 1 ,则 GPO 可能会重写计算机级设置。

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

gpresult /H c:\gpresult.html

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

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

  • 如果此策略的设置为“禁用”,检查赢得 GPO。 这是阻止 RDP 连接的 GPO。

    gpresult.html 示例段的屏幕截图,其中域级 GPO 块 RDP 正在禁用 RDP。

    本地组策略禁用 RDP 的 gpresult.html 示例段的屏幕截图。

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

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

gpresult /S <computer name> /H c:\gpresult-<computer name>.html

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

修改阻止 GPO

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

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

  • 在 GPE 中,访问适当级别的 GPO ((例如本地或域) ),并导航到计算机配置>管理模板>Windows 组件>远程桌面服务>远程桌面会话主机>Connections>允许用户使用远程桌面服务进行远程连接
    1. 将策略设置为 “已启用” 或“ 未配置”。
    2. 在受影响的计算机上,以管理员身份打开命令提示符窗口,然后运行 命令 gpupdate /force
  • 在 GPM 中,导航到组织单位 (OU) ,其中阻止策略应用于受影响的计算机,并从 OU 中删除策略。

检查 RDP 服务的状态

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

  • 远程桌面服务 (TermService)
  • 远程桌面服务 UserMode 端口重定向程序 (UmRdpService)

可以使用服务 MMC 管理单元在本地或远程管理服务。 如果远程计算机配置为接受远程 PowerShell cmdlet () ,则还可以使用 PowerShell 在本地或远程管理服务。

服务 MMC 管理单元中远程桌面服务的屏幕截图。

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

注意

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

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

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

检查 RDP 侦听器的状态

对于此过程,请使用具有管理权限的 PowerShell 实例。 对于本地计算机,还可以使用具有管理权限的命令提示符。 但是,此过程使用 PowerShell,因为相同的 cmdlet 在本地和远程工作。

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

    Enter-PSSession -ComputerName <computer name>
    
  2. 输入 qwinsta

    qwinsta 命令的屏幕截图,其中列出了在计算机端口上侦听的进程。

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

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

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

    2. 导航到以下注册表项:

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

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

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

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

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

      cmd /c 'reg export "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp" C:\Rdp-tcp-backup.reg'
      
    2. 若要删除现有注册表项,请输入以下 cmdlet:

      Remove-Item -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-tcp' -Recurse -Force
      
    3. 若要导入新的注册表项,然后重启服务,请输入以下 cmdlet:

      cmd /c 'regedit /s c:\<filename>.reg'
      Restart-Service TermService -Force
      

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

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

  7. 如果仍无法连接,检查 RDP 自签名证书的状态

检查 RDP 自签名证书的状态

  1. 如果仍无法连接,请打开“证书 MMC”管理单元。 当系统提示选择要管理的证书存储时,选择“ 计算机帐户”,然后选择受影响的计算机。
  2. “远程桌面”下的“证书”文件夹中,删除 RDP 自签名证书。
  3. 在受影响的计算机上,重启远程桌面服务服务。
  4. 刷新“证书”管理单元。
  5. 如果尚未重新创建 RDP 自签名证书,检查 MachineKeys 文件夹的权限

检查 MachineKeys 文件夹的权限

  1. 在受影响的计算机上,打开“资源管理器”,然后导航到 C:\ProgramData\Microsoft\Crypto\RSA\
  2. 右键单击“ MachineKeys”,选择“ 属性>安全>高级”。
  3. 请确保配置了以下权限:
    • Builtin\Administrators完全控制
    • 每个人读取写入

检查 RDP 侦听器端口

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

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

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

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

    • 若要连接到远程计算机,请选择“ 文件”,然后选择“ 连接网络注册表”。
    • “选择计算机 ”对话框中,输入远程计算机的名称,选择“ 检查名称”,然后选择“ 确定”。
  2. 打开注册表并导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\<listener>

    RDP 协议的 PortNumber 子项的屏幕截图。

  3. 如果 PortNumber 的值为 3389 以外的值,请将其更改为 3389

    重要

    可以使用其他端口操作远程桌面服务。 但是,我们不建议这样做。 本文不介绍如何对此类配置进行故障排除。

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

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

对于此过程,请使用具有管理权限的 PowerShell 实例。 对于本地计算机,还可以使用具有管理权限的命令提示符。 但是,此过程使用 PowerShell,因为相同的 cmdlet 在本地和远程工作。

  1. 打开一个 PowerShell 窗口。 若要连接到远程计算机,请输入 Enter-PSSession -ComputerName <computer name>

  2. 输入以下命令:

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

    netstat 命令的屏幕截图,该命令生成端口列表以及侦听这些端口的服务。

  3. 查找 TCP 端口 3389(或分配的 RDP 端口)的条目,该端口的状态为正在侦听

    注意

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

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

    cmd /c 'tasklist /svc | find "<pid listening on 3389>"'
    

    任务列表命令的屏幕截图,该命令报告特定进程的详细信息。

  5. 从输出) 查找与端口 (netstat 关联的 PID 编号条目。 与该 PID 关联的服务或进程显示在右侧列中。

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

    • 将其他应用程序或服务配置为使用不同的端口, (建议) 。
    • 卸载其他应用程序或服务。
    • 将 RDP 配置为使用其他端口,然后重启远程桌面服务服务, (不建议) 。

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

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

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

  2. 以管理员身份打开命令提示符窗口,切换到安装 psping的目录,然后输入以下命令:

    psping -accepteula <computer IP>:3389
    
  3. 检查命令的 psping 输出以获取如下所示的结果:

    • Connecting to \<computer IP\>:可以访问远程计算机。
    • (0% loss):所有连接尝试都成功。
    • The remote computer refused the network connection:无法访问远程计算机。
    • (100% loss):所有尝试连接都失败。
  4. 在多台计算机上运行 psping 以测试其连接到受影响计算机的能力。

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

  6. 建议的后续步骤:

    • Engage网络管理员验证网络是否允许将 RDP 流量发送到受影响的计算机。
    • 调查源计算机和受影响计算机之间的任何防火墙配置, (包括受影响计算机上的 Windows 防火墙) ,以确定防火墙是否正在阻止 RDP 端口。