如何在 Windows 中查看 RDP 连接日志

How to View RDP Connection Logs in Windows

Windows 会记录每一次远程桌面会话,但并不是集中在一个位置。详细信息被分散在事件查看器中的三个不同日志里,而且都不在默认的 Windows 日志路径下,因此在那里直接搜索通常不会有结果。

一旦你知道每个日志对应哪些事件,提取完整的会话历史只需几分钟,而不必再靠猜测耗上一个小时。

本指南介绍 Windows 在哪里存储传入的 RDP 日志,以及如何使用事件查看器和 PowerShell 来读取它们。还会说明最重要的事件 ID,并指明如果需要检查会话的客户端侧,应到哪里查找出站连接日志。

Windows 在哪里存储 RDP 日志

目标机器上的 RDP 日志位于 Windows 事件查看器中的三个不同位置:

Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational 记录会话连接、断开和注销事件(事件 ID 21、23、24、25、39、40)
Applications and Services Logs > Microsoft > Windows > TerminalServices-RemoteConnectionManager > Operational 记录网络级别连接事件(事件 ID 1149)
Windows Logs > Security 记录登录成功、失败以及会话审计事件(事件 ID 4624、4625、4778、4779)

这三类日志都记录目标机器上的活动,也就是被连接的那台机器。若要查看某个用户向外连接到了哪些机器,请参阅本文末尾附近的 Registry 和 RDPClient 部分。

关键 RDP 事件 ID 详解

这些是大多数管理员在调查远程桌面活动时使用的事件 ID。

事件 ID 日志 含义
1149 TerminalServices-RemoteConnectionManager 网络级别 RDP 连接已建立(凭据已验证)
4624 安全 登录成功
4625 安全 登录尝试失败
21 TerminalServices-LocalSessionManager 已成功创建远程会话
24 TerminalServices-LocalSessionManager 会话已断开连接
25 TerminalServices-LocalSessionManager 会话已重新连接
23 TerminalServices-LocalSessionManager 会话已注销
39 TerminalServices-LocalSessionManager 用户通过开始菜单断开连接,或被其他会话断开
40 TerminalServices-LocalSessionManager 会话已结束(或已重新连接)带有断开原因代码
4778 安全 会话已重新连接到窗口站
4779 安全 会话已从窗口站断开连接

 

了解事件 ID 1149

事件 ID 1149 比大多数 RDP 事件更容易引起混淆,部分原因在于它的标签:”用户身份验证成功。”

在当前版本的 Windows 中,一旦客户端的凭据已通过网络验证,它就会触发,此时尚未进行完整的交互式登录和会话创建。这与 Windows 7 和 Server 2012 之前版本的旧行为不同,当时无论凭据是否有效,1149 都可能为任何连接尝试记录日志。

因此,1149 的确意味着凭据已通过验证,但这并不意味着用户最终获得了可用的会话。会话限制、RDP 权限限制或许可问题仍可能在随后阻止登录。要确认是否有人真正登录,请将其与安全日志中的事件 ID 4624 或 LocalSessionManager 日志中的事件 ID 21 进行关联。

如何在事件查看器中查看 RDP 日志

事件查看器是在 Windows 10、Windows 11 以及 Windows Server 2016、2019 和 2022 上查看远程桌面连接日志的标准工具。

按下 Win + R,输入以下内容以打开事件查看器:

eventvwr.msc

并按 Enter 键。

终端服务-本地会话管理器 (会话事件)

这通常是首先要检查的日志,因为它会记录会话登录、断开连接、重新连接和注销。

导航至:

应用程序和服务日志 > Microsoft > Windows > TerminalServices-LocalSessionManager

选择 操作。单击 筛选当前日志。输入以下事件 ID:

21,23,24,25,39,40

单击 确定

每条记录都包含用户名、会话 ID、时间戳和源网络地址。

如果源网络地址包含远程 IP 地址,则表示 Windows 记录到了一次传入的 RDP 会话。如果其显示为 LOCAL,则该事件表示本地控制台登录,而不是远程桌面。

例如,如果管理员怀疑在非工作时间有人访问了 Windows Server,筛选事件 ID 21 将显示每一次成功的 RDP 会话及其时间戳和源地址。

终端服务-远程连接管理器 (连接尝试)

此日志记录了在 Windows 完成交互式登录并创建会话之前,通过网络对 RDP 客户端凭据进行验证的时点。

导航到:

应用程序和服务日志 > Microsoft > Windows > TerminalServices-RemoteConnectionManager > 操作

筛选条件:

1149

此日志在排查登录问题时很有用,因为它可确认客户端的凭据已被接受,即使随后由于权限或许可限制导致会话从未完全打开。

在断定有人实际进入了可用会话之前,请将其与安全日志或事件 ID 21 进行关联,因为凭据验证与完整登录完成并不是一回事。

安全日志 (身份验证事件)

安全日志会记录成功和失败的身份验证尝试,并需要管理员权限。

打开:

Windows 日志 > 安全

选择 筛选当前日志。筛选以下内容:

4624,4625,4778,4779

打开一个 4624 事件并查看“登录类型”字段。

传统的远程桌面登录显示为登录类型 10(RemoteInteractive)

在使用网络级别身份验证(NLA)的系统上(在现代版本的 Windows 中默认启用)通常会在登录类型 10 之前或同时看到登录类型 3(Network)

仅凭登录类型 3 不能识别 RDP 会话,因为 Windows 将其用于多种网络身份验证。将其与 Source Network Address、事件 ID 1149 或事件 ID 21 进行关联,以确定该活动是否来自远程桌面。

如何使用 PowerShell 查看 RDP 日志

与通过事件查看器导航相比,PowerShell 提供了更快速的方式来搜索 RDP 日志,并且在编写脚本和导出审计数据时尤其有用。

获取成功创建会话的事件:

Get-WinEvent -LogName ‘Microsoft-Windows-TerminalServices-LocalSessionManager/Operational’ |
Where-Object {$_.Id -eq 21} |
Select-Object TimeCreated, Message |
Format-List

在“安全”日志中搜索今天记录的成功远程桌面登录:

Get-WinEvent -FilterHashtable @{
 LogName=’Security’
 Id=4624
 StartTime=(Get-Date).Date
} |

Where-Object {$_.Message -match ‘Logon Type:\s+10’}

导出会话活动:

Get-WinEvent -LogName ‘Microsoft-Windows-TerminalServices-LocalSessionManager/Operational’ |
Where-Object {$_.Id -in 21,23,24} |
Export-Csv C:\rdp-session-log.csv -NoTypeInformation

在依赖历史日志之前还有一件值得检查的事情:TerminalServices-LocalSessionManager 日志在达到最大大小后会覆盖较旧的条目。在繁忙的远程桌面会话主机上,这可能会非常快地发生。

增大日志的最大大小:

wevtutil sl Microsoft-Windows-TerminalServices-LocalSessionManager/Operational /ms:20971520

此示例将日志增大到 20 MB。请根据需要保留的历史量进行调整。这样可以在旧条目被覆盖之前争取更多时间,但除非单独配置保留策略,否则并不会使日志永久保存。

如何查看出站远程桌面连接日志

到目前为止介绍的所有内容都用于在目标计算机上记录传入的 RDP 连接。

如果你需要从 Windows 工作站调查某位用户连接过哪些计算机,有两个有用的数据来源。

注册表 (连接历史记录)

打开注册表编辑器(regedit)并浏览到:

HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default

MRU0-MRU9 值包含远程桌面客户端使用过的最近十个主机名或 IP 地址。

这些条目提供目标历史记录,但不包含时间戳。

TerminalServices-RDPClient 日志

如果时间戳很重要,请检查:

应用程序和服务日志 > Microsoft > Windows > TerminalServices-ClientActiveXCore > Microsoft-Windows-TerminalServices-RDPClient > Operational

此日志会记录传出客户端活动,包括:

• Event ID 1024 – RDP 客户端尝试连接服务器,在启动连接的瞬间记录
• Event ID 1102 – 当客户端建立会话时记录连接序列的详细信息,包括目标 IP 地址

结合注册表项与此日志,你可以同时获得目标历史记录及其相应的时间戳。

HelpWire 如何记录会话历史

Windows 事件查看器并不是为这种事后审查而构建的。它是一种审计和故障排除工具,因此重建一次 RDP 会话通常意味着需要从两到三个单独的日志中提取数据,并手动对齐时间戳。

HelpWire 的处理方式不同:每个远程支持会话,无论是有人值守还是无人值守,都会被记录为一条按时间顺序排列的单一记录:连接事件、会话详情和聊天历史集中在一起,且会话结束后无需交叉引用。

HelpWire 通过 TLS 传输并使用 AES-256 对会话进行加密来保护远程会话。按需会话在开始前需要用户的明确批准,而无人值守访问必须在获得客户事先同意的前提下进行配置。该批准会直接体现在会话记录中,而无需事后从事件日志中重建。

由于 HelpWire 同时支持操作人员和客户使用的 Windows、macOS 和 Linux,因此无论涉及何种操作系统,都可以获得相同的会话历史。

常见问题

传入的 RDP 日志被拆分到事件查看器中的三个位置:TerminalServices-LocalSessionManager(用于会话活动)TerminalServices-RemoteConnectionManager(用于网络级别的连接)以及安全日志(用于身份验证事件)只有检查这三者,才能获得完整的全貌。

打开 TerminalServices-LocalSessionManager > Operational,筛选事件 ID 21,并按日期对结果进行排序。每个事件都包含用户名、会话 ID 和源网络地址。您可以将这些事件与 Security 日志条目相关联,以获取更多身份验证详细信息。

当远程客户端的凭据通过网络得到验证后,就会记录事件 ID 1149。如果连接从未到达目标计算机、凭据在此之前被拒绝,或者已禁用 TerminalServices-RemoteConnectionManager 日志,你将看不到该事件。请记住,1149 确认的是凭据验证,而不是已完成的 Windows 登录。

Windows 会保留 RDP 日志,直到每个事件日志达到其配置的最大大小。达到上限后,除非更改日志保留设置,否则较早的事件会被覆盖。增大日志大小可以保留更多历史记录,但并不能使日志永久保存。