ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Win10多用户同时远程登录配置全攻略:RDP Wrapper+组策略实战

Win10多用户同时远程登录配置全攻略:RDP Wrapper+组策略实战 如果你手头有一台 Win10 电脑想让几个人同时远程登录上去干活默认情况下第一个遇到的就是后来者踢掉先行者的尴尬。我在搭共享测试机时被这个问题坑过一次一台装了 Win10 1903 的机器上跑着自动化脚本同事远程连上来一登录直接把我踢下线脚本状态全丢。后来翻了一堆资料才知道Win10 多用户同时远程访问在 1903/1909 上是可以配置出来的但前提是要清楚微软这套单会话限制是怎么工作的。这篇就把配置方案、实测过程和坑点一次讲透主要给正在搭共享测试机、多开 Windows 虚拟机、或者想把普通 Win10 当小型服务器用的朋友参考。1. 什么时候真的需要多用户同时远程1.1 三个最常见的真实场景先说需求从哪来。不是每个人都有多台物理机器很多场景下你手上只有一台 Windows 主机但想让不止一个人在同一个系统里干活。第一个场景是共享测试机。团队里只有一台机器装了某个专用软件比如工控上位机、老旧的只支持 Windows 的客户端或者某个带加密狗的业务系统。同事 A 上去调试同事 B 也想同时上去看日志、改配置这时候如果系统只允许一个远程会话大家就得排队效率很低。第二个场景是Win10 当低配服务器用。很多人会拿旧电脑或者迷你主机装 Win10挂 NAS、跑自动化脚本、当下载机、做内网穿透的跳板机。这类机器一旦稳定运行家人、室友或者合伙人可能也想登录上去查点东西这时候多用户需求就自然出现了。第三个场景是虚拟机统一宿主机。一台物理机上跑着 VMware里面开了好几个 Win10 虚拟机。如果允许不同的人分别远程到不同虚拟机宿主机资源利用率会高很多。但有时候课程培训、演示环境需要多人同时远程到同一个虚拟机里操作不配置多会话就完全没法用。1.2 默认行为有多让人抓狂不配置的情况下Win10 远程桌面的默认行为是这样的A 远程登录到一台机器操作到一半B 从另一台电脑输入同一台机器的 IP 和凭据系统不会友好地开第二个桌面而是直接把 A 的会话断开或者锁屏。A 回来后发现自己的程序还在但桌面已经被锁远程连接也断了。这个体验非常难受尤其当 A 正在跑一个长时间任务比如大数据量导出、编译、或者上传下载被顶掉一次就是浪费时间。我早期不懂原理的时候甚至以为是网络不稳定后来才发现是会话被抢占。还有更坑的本地控制台会话和远程会话也会冲突。如果有人在本地坐着用这台 Win10其他人远程根本进不去甚至本地用户会被远程登录请求顶掉屏幕上直接切到登录界面。Windows 客户端版本的交互式会话限制卡的就是这个位置。2. Win10 默认单会话限制到底卡在哪里2.1 RDP 与会话机制的基础先说清楚底层的东西。RDPRemote Desktop Protocol远程桌面协议默认监听 3389 端口这是微软生态里最常用的远程访问手段。Windows 内核本身是支持多会话的这一点从 NT 架构时代就存在了——系统里有 Session 0 给服务用有 Console 会话给本地登录用有 RDP 会话给远程登录用。但系统支持多会话和允许同时存在几个交互式会话是两回事。这里有个关键概念Windows 的会话分为交互式会话和非交互式会话。非交互式会话比如服务宿主可以有很多个但交互式会话能看到桌面、能操作窗口的那种在客户端系统上被严格限制。Windows 的限制策略可以简单理解成一句话Win10/11 客户端只允许一个远程交互式会话。如果你试图开第二个新来的会把旧的挤掉或者直接拒绝。2.2 三层限制分别在哪这个限制不是一个注册表开关那么简单它是分层级实现的实际配置时要注意每一层。第一层是授权/许可层。Windows 10 的最终用户许可协议不允许把客户端系统当多用户服务器用微软在系统二进制层面也做了限制。这层限制最底层的检查逻辑写在termsrv.dll里每次新会话建立之前TermService 服务会调用内部函数去检查当前会话数量、会话类型超过限制就直接拒绝或者踢掉旧会话。第二层是服务策略层。组策略编辑器gpedit.msc里的计算机配置 \ 管理模板 \ Windows 组件 \ 远程桌面服务 \ 远程桌面会话主机 \ 连接 \ 限制连接数量默认状态在客户端系统上实际效果等于 1也就是只允许单个远程会话。很多教程只教开远程桌面开关完全没提这个策略结果配了也白配。第三层是会话管理层。即便你改完了策略层如果termsrv.dll的许可检查还在照样会被打回原形。所以我后来总结出一个结论要真正实现 Win10 多用户同时远程策略层和二进制层都要处理缺一不可。2.3 常见方案选型对比围绕这个需求网上能搜到的主要就是下面几类方案。我直接列个对比表方便你判断自己该走哪条路方案原理难度风险适用版本RDP Wrapper内存级修改 termsrv.dll 许可检查逻辑低低1903/1909 最稳新版本需更新配置替换 termsrv.dll用修改版 dll 覆盖系统文件中高容易系统损坏老版本不推荐组策略 注册表调整会话数量和远程桌面开关低无只能配合上面方案使用第三方远控软件不走 RDP 协议自建协议传输低低全版本通用Windows Server原生支持多会话远程桌面中无需授权Server 系列对 1903/1909 来说RDP Wrapper 是最成熟、最省事的方案对更高版本就得考虑更新配置或者放弃 RDP 逻辑改用第三方工具了。3. 1903/1909 方案RDP Wrapper组策略实测全流程3.1 前置条件确认动手之前务必先确认三件事。第一系统版本必须是专业版/企业版/教育版。Windows 10 家庭版没有远程桌面服务端也就是说它根本不能作为被连接的那一端后面所有操作都没有意义。如果你手里是家庭版先想办法换个版本否则没必要往下看。第二确认版本号。1903 的版本号是 18362.x1909 的版本号是 18363.x在运行框里输入winver就能看到。RDP Wrapper 对这两个版本的匹配度最高社区里现成的配置文件也最多。第三目标账户必须设置密码。Windows 默认禁止空密码账户通过远程桌面登录这是安全策略不是 bug。所以给要远程登录的用户设好密码再去加权限组。顺带说一句最好把系统更新暂时挂起尤其是大版本更新。因为一旦系统从 1903 升到 20H2 甚至更高后面要重新折腾配置非常烦人。3.2 部署 RDP Wrapper下载 RDP Wrapper 一定要去官方 GitHub 仓库搜 rdpwrap 就行不要从某些下载站拿文件防止被捆绑东西。下载 Release 里的 zip 包解压后你会看到这几个关键文件install.bat安装服务用的脚本uninstall.bat卸载服务用的脚本RDPWInst.exe服务安装程序RDPCheck.exe本地检测工具用来验证有没有生效rdpwrap.ini核心配置文件里面按系统版本记录了补丁偏移地址部署方式很简单管理员身份打开命令行切到解压目录执行cd C:\rdpwrap install.bat或者直接在文件管理器里右键install.bat选以管理员身份运行。安装完成后系统里会多一个名为 RDP Wrapper 的服务开机自启启动时加载rdpwrap.ini并应用内存补丁。这里有个关键点RDP Wrapper 并不修改系统的 termsrv.dll 文件它是在内存里动态修改 License 检查逻辑的跳转和判断。这也是我选它的原因——不碰系统文件出问题卸载一下就行不会把系统弄到启动不了。装完之后运行RDPCheck.exe它会尝试在本机建立本地回环测试会话。如果显示RDP-Tcp is listening以及Supports multiple sessions之类的状态说明补丁已经生效。如果显示not supported或者hook failed那多半是rdpwrap.ini和当前系统版本不匹配需要去社区找对应版本的配置文件。3.3 组策略配合修改前面说过光有内存补丁还不够还要放开会话数量策略。这一步是很多人忽视的关键环节。在运行框输入gpedit.msc打开组策略编辑器定位到计算机配置 \ 管理模板 \ Windows 组件 \ 远程桌面服务 \ 远程桌面会话主机 \ 连接 \ 限制连接数量把这个策略改成已启用然后在允许的 RD 最大连接数里填一个合适的值。我自己的测试机填的是 8够一个小团队用了。如果你只是两个人用填 2 或 3 也行注意这个值的上限不是越大越好因为真正并发的时候硬件资源消耗很大后面我会细讲。还有一个容易踩坑的策略在同一个路径下将远程桌面服务用户限制到单独的远程桌面服务会话。这个策略如果你希望每个远程用户拥有独立的桌面会话那要保持已启用或者未配置具体看系统默认千万别改成已禁用。否则多个用户可能会被路由进同一个会话出现A 做了什么 B 都能看到的诡异情况。同时要把系统自带的远程桌面开关打开。设置 \ 系统 \ 远程桌面 \ 启用远程桌面。如果你更习惯命令行这个注册表项也是一样的效果reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server /v fDenyTSConnections /t REG_DWORD /d 0 /f3.4 添加远程登录用户系统默认情况下管理员组的成员自带远程登录权限普通用户则必须加进 Remote Desktop Users 组否则远程桌面会提示没有权限。给指定用户加组的命令很简单net localgroup Remote Desktop Users 用户名 /add也可以用图形界面lusrmgr.msc打开本地用户和组找到 Remote Desktop Users 组把用户加进去。我的习惯是普通用户只加这个组不要一股脑塞进 Administrators权限隔离对共享机器来说非常重要不然谁都能改系统设置出问题都说不清是谁干的。3.5 重启与验证准备所有配置改完之后建议直接重启一次机器。如果不想重启也可以手动重启两个服务Remote Desktop Services和Remote Desktop Services UserMode Port Redirector。RDP Wrapper 服务本身会跟着自动加载补丁。然后检查 3389 端口是否正常监听netstat -ano | findstr 3389如果看到LISTENING状态说明远程桌面服务已经正常启动。到这里1903/1909 版本的配置流程就走完了。4. 更高版本为什么不能直接照搬termsrv.dll 变化与应对4.1 症状与本质原因如果你把这个流程直接拿到 21H2、22H2 或者 Win11 上跑大概率会遇到这几个现象RDPCheck.exe显示not supported或hook failedRDP Wrapper 的界面里状态是红色远程桌面依然只有单会话第二个用户照样顶掉第一个本质原因不复杂termsrv.dll 的二进制更新了。RDP Wrapper 的工作原理本质上是根据系统版本在 termsrv.dll 特定偏移位置打内存补丁。系统版本升级后dll 里的函数布局、指令偏移、特征码都变了rdpwrap.ini里记录的旧偏移量就对不上了补丁自然失效。打个比方这就像给旧款车型定制的改装件新款车底盘变了改装件型号对不上硬装也装不上。4.2 适配新版本的常规路径面对高版本系统常规思路有下面几条难度从低到高排列。第一更新 RDP Wrapper 本体和 rdpwrap.ini。GitHub 仓库的 issues 区和社区里经常有人针对新版本分享新的 ini 文件。你把新的rdpwrap.ini覆盖旧文件重启 RDP Wrapper 服务有时候就能救回来。能不能成功取决于社区更新是否跟得上 Windows 更新的速度。第二自己动手定位偏移。想一劳永逸得用 x64dbg 加载 termsrv.dll搜索特征码手动分析许可检查逻辑找到新的跳转位置。这需要一定的逆向基础不适合大多数用户也不建议为了一个补丁花太多时间。第三放弃 RDP 这一套改用第三方远控软件。ToDesk、AnyDesk、向日葵、RustDesk 这些软件基于自己的协议传输天然支持多用户并发不走 termsrv.dll 的检查版本更新也影响不到它们。如果你的目标只是让多个人同时使用一台 Windows这条路反而更省心。第四干脆换 Windows Server。如果这台机器长期被当多人共用服务器用那 Windows Server 远程桌面服务授权就是正规且一劳永逸的方案。4.3 版本升级后补丁失效的处理如果你的机器之前配好了某天突然补丁失效大概率是 Windows 更新悄悄更新了 termsrv.dll。这时候先确认当前完整版本号Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion | Select DisplayVersion, UBR拿到版本号后去搜对应版本的rdpwrap.ini更新。找到后覆盖旧 ini重启服务再跑一遍RDPCheck.exe验证。为了防止这种情况频繁发生我建议共享测试机这类场景直接关闭自动更新或者把系统固定在一个长期使用的版本上稳定压倒一切。5. 多会话是否生效的验证方法与常见排错5.1 三步验证法配置完成的标志不是看起来一切都好而是实测两个人同时在线。我自己验证的方法是三步走。第一步用账号 A 从电脑 1 远程登录目标机保持连接不断开。 第二步用账号 B 从电脑 2 远程登录同一台目标机。 第三步观察账号 A 那边有没有弹出已断开或者被锁屏。如果 A 的会话还在B 也顺利进入桌面并且在任务管理器 \ 用户 选项卡里能看到两个用户同时在列说明配置彻底生效了。如果只有一台电脑可以用RDPCheck.exe自带的本地回环测试。也可以开两个 RDP 客户端一个用mstsc普通模式连一个用mstsc /admin连本机虽然不完全等效但能大致判断服务有没有问题。5.2 常见报错对照表实际操作中大概率会遇到下面这些报错我按现象整理了一个排查表现象可能原因处理手法无法连接远程桌面服务未启动或端口未监听启动 Remote Desktop Services检查 3389 端口提示凭据错误用户无密码或不在允许组里给用户设置密码加到 Remote Desktop Users 组NLA 认证失败网络级别认证配置问题系统属性 \ 远程 \ 取消勾选仅允许带网络级别认证的远程桌面第二个用户顶掉第一个补丁未生效或限制连接数量 1检查 RDP Wrapper 状态改组策略里的最大连接数RDP Wrapper 显示不支持ini 配置和系统版本不匹配更新 rdpwrap.ini或换方案其中 NLANetwork Level Authentication网络级别认证这个问题比较容易忽视。它要求远程客户端在建立完整会话前先完成身份验证一般配置正确不会出问题但跨域、工作组环境下偶尔会抽风。如果确认凭据没问题还连不上把 NLA 关掉试试。5.3 事件日志辅助判断如果问题比较隐蔽单纯看现象排查不出原因可以看事件查看器。打开eventvwr.msc在 Windows 日志 \ 系统 里筛选来源为TermService和RemoteDesktopServices的日志能找到会话建立和断开的记录。比如事件 ID 21 表示会话已登录事件 ID 25 表示会话已注销后面通常会带一个原因码。如果原因码提示因为已达到最大连接数那就说明补丁还没真正生效回去检查限制连接数量和 RDP Wrapper 状态。这个排查思路比瞎猜高效得多。6. 合规风险与替代方案别一条路走到黑6.1 风险提示先把丑话说在前面。Windows 10 客户端的授权协议本身不支持同时多个远程交互式会话RDP Wrapper 这类内存补丁本质上属于绕过许可检查的技术手段。用于个人学习、实验、内部测试问题不大这是技术圈常见的做法。但如果在商业生产环境大规模部署我建议老老实实买 Windows Server 授权和 RDS CAL避免法律和合规风险。技术层面也有几点风险要注意杀毒软件误报。RDP Wrapper 的内存补丁行为很容易被 Windows Defender 或其他杀软标记为风险工具安装时需要加白名单。工具来源一定要可靠从官方 GitHub 仓库下载。Windows 更新可能让补丁失效。系统更新一旦更新 termsrv.dll补丁就需要重新打。共享机器上最好控制更新节奏。稳定性问题。内存补丁方案在多数情况下稳定但毕竟不是微软官方支持的做法极端场景下不排除线程崩溃。重要的数据要定期备份别把鸡蛋全放在一个篮子里。6.2 替代方案如果你不想折腾 RDP Wrapper或者系统版本太高配不出来有几个更省心的替代思路。Windows Server 是正道。如果你的目标是把一台机器长期当多用户服务器用迁移到 Windows Server 是一步到位的选择。Server 系统默认允许两个管理远程会话加装远程桌面服务角色和相应授权后可以支持大量并发会话而且是微软官方支持的做法稳定性和兼容性都有保障。第三方远控软件也很香。ToDesk、AnyDesk、向日葵、RustDesk 这类工具天然支持多用户并发免去了端口映射、防火墙、NLA 等一系列麻烦甚至在跨网络环境下比 RDP 更省心。缺点是不是原生 RDP 协议某些远程打印、USB 重定向、剪贴板双向传文件的能力可能有差异重度办公场景需要实测。如果只是要同一台机器的多个桌面Windows 自带的虚拟桌面功能Task View和 Windows Sandbox 也可以顶一阵子但它们不是为多用户设计的只能用来短期演示或者临时隔离替代不了真正的多用户多会话。6.3 我的经验总结最后分享几句实在话。1903/1909 版是 RDP Wrapper 支持最完善的版本这也解释了为什么标题里特意强调适用版本。如果你只是想搭个测试环境直接找这两个版本的镜像最省心别用最新版系统跟自己过不去。无论用哪个方案先确认 Windows 是专业版或企业版家庭版直接省掉你 80% 的折腾。也别想着给每个远程用户都开管理员权限普通用户加到 Remote Desktop Users 组就够了权限隔离在共享机器上永远是第一原则。还有一点容易被忽略每个远程用户登录进去后都是在用同一台机器的 CPU、内存和 GPU多用户并发对硬件压力非常大。我见过有人一台 4GB 内存的破电脑硬开 5 个远程会话结果每个会话都卡成幻灯片。建议根据硬件配置控制并发数我一般 8GB 内存的机器最多允许 2 到 3 个会话16GB 才会放到 5 个以上。另外远程会话如果只是点了窗口右上角的叉它不会真正注销而是变成已断开状态继续占着内存和进程资源。共享机器上需要设置一下组策略里的设置已断开会话的时间限制比如 30 分钟自动注销可以把长期不用的会话清掉释放系统资源这个细节对长时间运行的共享测试机特别有用。
返回列表