远程桌面无法连接到远程计算机

本文有助于排查连接到远程计算机时出现的错误。

使用直接远程桌面协议(RDP)连接连接到 Windows 计算机时,连接失败,并出现以下错误之一。 该错误发生在在远程桌面连接应用程序上输入凭据之前或之后。

  • 出于以下某种原因,远程桌面无法连接到远程计算机:

    1) 未启用对服务器的远程访问
    2) 远程计算机已关闭
    3) 远程计算机在网络上不可用

    请确保远程计算机已打开并已连接到网络,并且已启用远程访问。

  • 此计算机无法连接到远程计算机。

    请再次尝试连接。 如果问题持续出现,请与远程计算机的所有者或网络管理员联系。

有多种可能的根本原因,但主要原因为 RDP-TCP 侦听器不起作用,网络配置不正确。

首先,检查计算机是否正在运行。 如果它正在运行并且具有主机访问权限(例如物理计算机的集成灯出(iLO),或者虚拟机的 Hyper-V 控制台),请测试如何通过它连接到计算机。 如果成功,请继续 验证错误是否与 RDP-TCP 侦听器相关。

在以下情况下,请联系Microsoft 支持部门获取进一步帮助:

  • 无法使计算机处于运行状态。
  • 计算机处于运行状态,但主机对计算机的访问失败。

qwinsta运行该命令以验证 RDP-TCP 侦听器是否在运行 RDP 连接。

C:\Windows\System32>qwinsta
 SESSIONNAME    USERNAME    ID    STATE    TYPE    DEVICE
 services                   0     Disc
>console                    1     Active
 rdp-tcp                    65536 Listen

如果输出列表包含 rdp-tcp 处于状态的 Listen 行,则 RDP-TCP 侦听器正在运行。 继续验证错误是否与网络相关。

否则,请使用以下方法来排查该问题。

检查注册表配置

重要

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

打开注册表编辑器并确保按如下所示设置这些键:

  • DWORD 值 fEnableWinStation 的值为 1

    默认路径:Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp

  • DWORD 值 fDenyTSConnections 的值为 0

    • 默认路径:Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server
    • 策略路径(如果配置了策略): Computer\HKEY\_LOCAL\_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services

备注

策略会替代默认配置,应使用 gpedit.msc (本地)或 gpmc.msc (域级别)进行配置。

如果同时配置了策略和默认值,请确保两个 fDenyTSConnections 值都设置为 0,以避免可能的侦听器问题。

检查服务

确保以下服务正在运行:

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

如果任何服务无法启动,请联系Microsoft 支持部门获取进一步帮助。

检查权限

将网络服务添加到受影响计算机上的本地管理员组,并在提升的会话上运行以下 PowerShell cmdlet:

Add-LocalGroupMember -Group Administrators -Member "Network Service"

之后,重启远程桌面服务服务(TermService)。

检查 sysprep 状态

通过打开注册表编辑器并检查以下键,确保计算机未处于 Sysprep 状态:

Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\Setup

DWORD 值 SystemSetupInProgress 和 OOBEInProgress 均设置为 0。

替换 RDP-TCP 子项

在同一 Windows 版本正常运行的计算机上导出以下子项:

Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

备份受影响计算机上的现有密钥。 然后,将其删除,并将其替换为从正常运行的计算机导出的子项。

备注

无法使用删除子项通过 RDP RDP-Tcp 访问计算机。

请联系 Microsoft 支持

如果上述步骤无法解决 RDP-TCP 侦听器无法正常工作的问题,请联系Microsoft 支持部门获取进一步帮助。

如果 RDP-TCP 侦听器正常工作,请使用以下步骤检查是否可以通过控制台会话连接到服务器(例如,物理计算机的 iLO 或虚拟机的 Hyper-V 控制台):

  1. “运行”框中键入 mstsc 以打开远程桌面连接应用程序。
  2. 远程桌面连接应用程序中,在“计算机”框中键入 localhost,然后选择“连接”。

如果错误仍然存在,则服务器出现问题。 转到 验证计算机的配置和角色

如果错误不再发生,则可能与网络相关,并且可能会进一步排查以下步骤的问题。

备注

上述测试仅在 Windows Server 计算机上可用,可能并非在所有场合(例如 Azure 虚拟机)可用。

如果不可用或可能,请从同一网络中的计算机测试与 Test-NetConnection cmdlet 的连接。

若要确认连接问题,请从同一网络中的计算机运行以下步骤:

  1. 打开提升的 PowerShell 窗口,并运行以下 cmdlet:

    Test-NetConnection -ComputerName <www.contoso.com> -port 3389 -InformationLevel Detailed
    
  2. 在输出列表中,如果是TcpTestSucceededTrue,则表示没有连接问题。 转到 验证计算机的配置和角色

  3. False如果是TcpTestSucceeded,则表示连接问题。 转到下一步。

检查默认 RDP 端口

打开注册表编辑器,确保按如下所示设置以下键:

Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp

DWORD 值 PortNumber 具有值 0x00000d3d (3389)。

如果值不同,远程桌面连接应使用 hostnameport 或 IPaddressport 作为计算机名称。

检查域名系统(DNS)解析

如果使用计算机的主机名时连接失败,请尝试使用其 IP 地址进行连接。

  • 如果连接适用于 IP 地址,则问题可能与名称解析相关。
  • 如果连接也因 IP 地址而失败,请继续执行下一个故障排除步骤。

检查防火墙或网络安全组配置

检查防火墙规则是否允许 RDP 访问计算机,或者防火墙是否已禁用。

打开 wf.msc,选择 入站规则 并查找 远程桌面 - 用户模式 (TCP-In)远程桌面 - 用户模式 (UDP-In) 。 请确保它们已启用到所有配置文件。

可以在提升的会话上使用以下 PowerShell cmdlet 获得相同的结果:

Get-NetFirewallRule -DisplayGroup "Remote Desktop" | Set-NetFirewallRule -Enabled True

若要排除防火墙,可以使用 PowerShell cmdlet 禁用它:

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

如果其他网络元素限制流量,则应检查它们。

使用 Azure 云时,检查网络安全组(NSG)是否已配置为允许 RDP 连接到子网或网络接口卡(NIC)。 如果将 标准 SKU 用于公共 IP 地址,则 NSG 是必需的。

检查防病毒(AV)

防病毒可能会对与计算机的 RDP 连接产生负面影响。 如果可能,请禁用 AV 服务并测试连接。

若要完全排除 AV 作为根本原因,请将其卸载并重启计算机。

请联系 Microsoft 支持

如果上述步骤无法解决问题,RDP-TCP 侦听器正在工作,并且连接测试结果为False,请联系Microsoft 支持部门以获取进一步帮助。

验证计算机的配置和角色

如果 RDP-TCP 侦听器正常工作,并且与计算机的连接测试结果是 True,则应检查与计算机进程、角色或配置相关的其他方案。

使用默认 RDP 端口检查并发进程

在提升的命令提示符或 PowerShell 窗口中运行以下命令,并确保在端口 3389 上侦听的进程 ID (PID) TermService 匹配:

  • tasklist /svc | findstr TermService
    
  • netstat -anob | findstr 3389
    

例如, TermService 使用 PID 820 侦听端口 3389。

C:\Windows\System32>tasklist /svc | findstr TermService
svchost.exe        820 TermService

C:\Windows\System32>netstat -anob | findstr 3389
  TCP    0.0.0.0:3389    0.0.0.0:0    LISTENING    820
  TCP    [::]:3389       [::]:0       LISTENING    820
  UDP    0.0.0.0:3389    *:*                       820
  UDP    [::]:3389       *:*                       820

如果 PID 不匹配,请查找正在侦听端口 3389 的进程并停止它。 然后,重启远程桌面服务服务(TermService)。

检查远程桌面自签名证书

按照以下步骤检查是否可以重新创建远程桌面自签名证书:

  1. 打开“证书”Microsoft管理控制台(MMC)管理单元。 当系统提示你选择要管理的证书存储时,请选择 “计算机帐户”,然后选择受影响的计算机。
  2. 在“远程桌面”下的“证书”文件夹中,删除 RDP 自签名证书。
  3. 在受影响的计算机上重启远程桌面服务服务。
  4. 刷新证书管理单元。
  5. 如果未重新创建 RDP 自签名证书,请转到 远程桌面自签名证书
  6. 如果重新创建 RDP 自签名证书,请转到下一步。

检查远程桌面服务(RDS)角色

检查是否已在 服务器管理器>Manage>Remove Roles and Features>Server Roles Remote Desktop Services 上安装不必要的 RDS 角色。 -

如果安装了不必要的角色,请取消选中相应的框,然后继续删除它们(例如远程桌面连接代理角色)。 最后重启计算机。

如果满足以下条件,RDS 部署中具有远程桌面连接代理角色的计算机仍可能会遇到此问题:

  • 检查远程桌面连接代理服务(TSSDis)是否正在运行。
  • 在计算机管理(compmgmt.msc)管理单元中,系统工具>本地用户和组组>RDS 终结点服务器组>必须包含 NT AUTHORITY\NETWORK SERVICE 帐户。

请联系 Microsoft 支持

如果上述步骤无法解决问题,RDP-TCP 侦听器正在工作,并且连接测试结果为True,请联系Microsoft 支持部门以获取进一步帮助。