我们正在使用 Windows Server 2022 作为远程桌面会话主机,具有基于会话的远程连接,并且存在一个问题,即远程会话随机与基于 freerdp 的客户端断开连接。
当探索 Windows 协议时,我们注意到一条似乎与我们的问题相关的特定信息消息:
事件 ID:39 消息:Session "17" has been disconnected by session "0"
第一个会话是断开连接的会话,第二个会话始终为“0”。我们将会话“0”理解为 root/windows 会话。但问题是,为什么 root 会话会随机终止我们的客户端会话?
客户端的错误如下所示:
[15:06:14:485] [469455:000729dc] [INFO][com.freerdp.core] - [rdp_print_errinfo]: ERRINFO_RPC_INITIATED_DISCONNECT (0x00000001):The disconnection was initiated by an administrative tool on the server in another session.
经过一夜的调试,我们找到了答案:确实是智能卡移除策略导致了这个问题。我们首先排除了这种可能性,因为断开连接甚至发生在没有智能卡的客户端上,但最终,智能卡服务才是罪魁祸首。事后看来,这完全说得通,它是一种位于会话“0”中的服务,当它检测到智能卡被移除时,它会断开其他会话的连接。
我们无法解释为什么它经常出现故障,终止仍连接智能卡的会话或根本没有智能卡的会话,但禁用策略可以解决问题。我们现在在客户端检测到已移除的智能卡,并相应地终止 freerdp 会话。