本文有助于排查连接到远程计算机时出现的错误。
使用直接远程桌面协议(RDP)连接连接到 Windows 计算机时,连接失败,并出现以下错误之一。 该错误发生在在远程桌面连接应用程序上输入凭据之前或之后。
-
出于以下某种原因,远程桌面无法连接到远程计算机:
1) 未启用对服务器的远程访问
2) 远程计算机已关闭
3) 远程计算机在网络上不可用请确保远程计算机已打开并已连接到网络,并且已启用远程访问。
-
此计算机无法连接到远程计算机。
请再次尝试连接。 如果问题持续出现,请与远程计算机的所有者或网络管理员联系。
有多种可能的根本原因,但主要原因为 RDP-TCP 侦听器不起作用,网络配置不正确。
验证错误是否与计算机的状态或性能相关
首先,检查计算机是否正在运行。 如果它正在运行并且具有主机访问权限(例如物理计算机的集成灯出(iLO),或者虚拟机的 Hyper-V 控制台),请测试如何通过它连接到计算机。 如果成功,请继续 验证错误是否与 RDP-TCP 侦听器相关。
在以下情况下,请联系Microsoft 支持部门获取进一步帮助:
- 无法使计算机处于运行状态。
- 计算机处于运行状态,但主机对计算机的访问失败。
验证错误是否与 RDP-TCP 侦听器相关
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 控制台):
- 在“运行”框中键入 mstsc 以打开远程桌面连接应用程序。
- 在远程桌面连接应用程序中,在“计算机”框中键入 localhost,然后选择“连接”。
如果错误仍然存在,则服务器出现问题。 转到 验证计算机的配置和角色。
如果错误不再发生,则可能与网络相关,并且可能会进一步排查以下步骤的问题。
备注
上述测试仅在 Windows Server 计算机上可用,可能并非在所有场合(例如 Azure 虚拟机)可用。
如果不可用或可能,请从同一网络中的计算机测试与 Test-NetConnection cmdlet 的连接。
若要确认连接问题,请从同一网络中的计算机运行以下步骤:
打开提升的 PowerShell 窗口,并运行以下 cmdlet:
Test-NetConnection -ComputerName <www.contoso.com> -port 3389 -InformationLevel Detailed
在输出列表中,如果是
TcpTestSucceeded
True
,则表示没有连接问题。 转到 验证计算机的配置和角色。False
如果是TcpTestSucceeded
,则表示连接问题。 转到下一步。
检查默认 RDP 端口
打开注册表编辑器,确保按如下所示设置以下键:
Computer\HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp
DWORD 值 PortNumber 具有值 0x00000d3d (3389)。
如果值不同,远程桌面连接应使用 hostname:port 或 IPaddress:port 作为计算机名称。
检查域名系统(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)。
检查远程桌面自签名证书
按照以下步骤检查是否可以重新创建远程桌面自签名证书:
- 打开“证书”Microsoft管理控制台(MMC)管理单元。 当系统提示你选择要管理的证书存储时,请选择 “计算机帐户”,然后选择受影响的计算机。
- 在“远程桌面”下的“证书”文件夹中,删除 RDP 自签名证书。
- 在受影响的计算机上重启远程桌面服务服务。
- 刷新证书管理单元。
- 如果未重新创建 RDP 自签名证书,请转到 远程桌面自签名证书。
- 如果重新创建 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 支持部门以获取进一步帮助。