ARTICLE DETAIL

资讯详情

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

Windows Server远程连接排查:会话超时与授权过期全解决

Windows Server远程连接排查:会话超时与授权过期全解决 Windows Server 的远程连接说简单也简单说坑也真坑。上个月我连续处理了两台服务器的远程桌面问题一台是 Windows Server 2019远程桌面能连上但挂机超过 10 分钟就掉线另一台是 Windows Server 2016装了三个月后开始定时自动关机根本没法稳定远程操作。两个问题表面上看不相干本质上都是过期时间在作怪——一个是远程会话的超时策略没设置好另一个是系统评估授权到期了。这篇就把我从零开启远程连接、到处理会话超时、再延长系统过期时间的全过程完整记录下来亲测有效Windows Server 2016/2019/2022 都适用新手照做也能搞定。如果你正被这些问题折磨远程桌面开不起来、连上了又频繁断开、服务器用了几个月后动不动自己关机、买不起也不想瞎折腾许可证那这篇文章就是给你写的。我会先帮你判断你到底遇上了哪种过期再给你一步步的实操命令和截图级说明最后还附上我踩过的坑。1. 先搞清楚过期时间到底过期在哪1.1 两类最常见的过期问题我把平时运维中遇到的过期问题分成两类这两类在症状上容易混淆但处理逻辑完全不同。第一类是远程桌面会话超时。你远程连接上服务器后只要一段时间没有操作键盘鼠标系统就会自动断开连接或者直接注销会话。有时候是 10 分钟有时候是 60 分钟更有甚者网上很多人反馈的是连上去用一会儿直接弹出提示说远端会在 60 分钟后断开。这类问题本质上不是系统坏了而是 Windows Server 默认有一套针对远程桌面会话的时间限制策略再加上 RDS远程桌面服务授权模式的检查机制到期后就会强制回收会话。第二类是系统授权过期。Windows Server 的评估版Evaluation默认只有 180 天使用期到期之后如果你没有输入正式产品密钥激活系统会进入一种只剩两小时自动关机的惩罚模式。你正远程操作着重启或排查问题突然就关机了非常崩溃。很多人在网上搜Windows Server 2016产品密钥Windows Server 2019产品密钥就是因为评估期到了想找个方式延续下去。这两类问题经常同时出现。比如一台评估版服务器授权快到期了你远程操作时正好赶上会话超时策略生效就会被踢下线踢了几次之后系统又自动关机你整个人都麻了。所以处理之前第一步永远是定位清楚到底是哪个过期。1.2 两分钟定位你属于哪种情况不用瞎猜两条命令就能判断。先看系统授权剩余时间。用管理员身份打开命令提示符或 PowerShell执行slmgr /xpr如果弹出的窗口里写着永久激活那说明系统授权这块没问题你去查会话超时策略就行。如果写着将在XX天内过期或者已过期那你需要处理的就是授权问题跳到文章第 5 部分。再看远程桌面会话超时策略。运行gpedit.msc依次展开计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 会话时间限制看里面有没有配置项被启用了尤其是设置活动但空闲的远程桌面服务会话的时间限制和设置已断开会话的时间限制这两项。如果被启用了而且时间不是从不那这就是你频繁掉线的根源。另外一个隐藏因素如果你的服务器安装了远程桌面服务角色但没有配置正确的授权模式系统会按默认的 120 天宽限期来运行。宽限期结束后客户端连接时就会出现60 分钟后断开之类的提示。这个我在第 4 部分详细说因为它真的很坑很多人排查了一整天都找不到原因。2. 开启远程连接GUI 和命令两条路2.1 图形界面开启远程桌面Windows Server 默认是关闭远程桌面的原因也很简单作为服务器不应该平白无故暴露远程桌面端口。但实际运维中没有远程桌面基本没法干活所以第一步就是把它打开。图形界面最直接右键此电脑 → 属性 → 左侧找到远程桌面点进去把启用远程桌面的开关打开。Windows Server 2016 之后的界面基本都是这样简单粗暴。不过这里有个很关键的选项启用远程桌面后系统会默认勾选仅允许运行使用网络级别身份验证的远程桌面的计算机连接建议使用。这个 NLA网络级别身份验证强烈建议保持勾选状态因为它在建立远程桌面会话之前就要求你完成身份验证能有效避免服务器暴露在公网时被暴力破解。如果你用老旧的 Windows 7 或某些精简版系统去连接可能会因为不支持 NLA 而连不上这时候再临时把勾去掉但仅限于临时场景连完记得勾回来。2.2 PowerShell 一条命令开启如果你面对的是几十台服务器或者服务器只开放了 SSH、根本没法打开图形界面那你肯定希望用命令批量操作。PowerShell 开启远程桌面只需一条命令Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Control\Terminal Server -Name fDenyTSConnections -Value 0这行命令本质上就是修改注册表把fDenyTSConnections这个键值从 1 改成 0。它对应的就是图形界面上那个启用远程桌面开关。改完之后用这条命令确认一下是否生效Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Control\Terminal Server -Name fDenyTSConnections输出结果里fDenyTSConnections为 0就说明已经开启了。2.3 防火墙、账号权限、NLA 一个都不能少很多人在这一步犯了错远程桌面明明开了但从客户端一连接就提示无法连接原因多半是防火墙没放行。Windows Server 默认会有一条远程桌面防火墙规则正常情况下启用远程桌面后系统会自动把规则打开。但如果你之前改过防火墙策略或者从旧系统迁移过配置这条规则可能没启用。手动开启命令如下Enable-NetFirewallRule -DisplayGroup Remote Desktop执行后可以用Get-NetFirewallRule -DisplayGroup Remote Desktop确认规则状态是True。连接之前还要确认你要用的账号有远程登录权限。默认情况下本地 Administrators 组成员是允许远程登录的但如果你用的是普通用户需要在本地安全策略 → 本地策略 → 用户权限分配 → 允许通过远程桌面服务登录里把这个用户加进去。这条不用我教了吧直接在系统属性 → 远程桌面 → 选择用户里添加就完事。还有一点如果你是跨网段访问或者服务器有多个网卡记得确认远程桌面监听的端口默认 3389在你需要访问的网段上是通的。可以用netstat -ano | findstr 3389看看监听地址如果监听的是 127.0.0.1 而不是 0.0.0.0那就是被配置限制到本机了这种情况我后面踩坑部分会展开讲。3. 延长远程桌面会话的过期时间把超时限制拉满3.1 组策略里的会话时间限制远程桌面连接成功后频繁被断开最常见的原因是会话时间限制策略在作怪。Windows Server 默认的组策略里有几个项目专门管这件事位置如下计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 会话时间限制这里面你需要重点检查四个策略项设置活动但空闲的远程桌面服务会话的时间限制指你连接后挂机不操作多久算超时。默认是未配置但有些企业模板会把它设成 15 分钟或 30 分钟。设置活动会话的时间限制不管你操作不操作一个会话最多能维持多久。如果这里被限制了你正忙着改配置也会被秒踢。设置已断开会话的时间限制网络闪断后会话还保留多久超过时间就被系统回收。达到时间限制时终止会话配合上面三条使用决定超时后是彻底终止会话还是仅仅断开。我的建议是把前三个都改成从不或未配置把第四个设置为已禁用或未配置。实际操作很简单每一项双击打开选择已启用然后在选项里把时间改成从不就可以了。如果你只需要保证挂机不掉线最核心的就是第一项活动但空闲的会话时间限制。把它设为从不你就可以远程开着窗口去吃饭回来还在。3.2 直接改注册表更彻底组策略里的设置有时候会因为域策略覆盖、或者本机被某个安全基线模板锁死而失效。这时候绕开组策略直接改注册表是最稳的路。对应的注册表位置是HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp相关键值如下键名类型默认值含义MaxIdleTimeDWORD0会话空闲超时时间单位毫秒0 表示不限制MaxConnectionTimeDWORD0会话最大持续时间0 表示不限制DisconnectedSessionTimeoutDWORD0已断开会话的保留时间0 表示不限制用管理员 PowerShell 执行下面三条命令reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v MaxIdleTime /t REG_DWORD /d 0 /f reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v MaxConnectionTime /t REG_DWORD /d 0 /f reg add HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp /v DisconnectedSessionTimeout /t REG_DWORD /d 0 /f执行完先别急着连我下面告诉你为什么要重启服务。3.3 改完必须重启服务注册表和组策略改动后正在运行的远程桌面服务进程不会立刻加载新配置。很多人改完发现没用就是因为没重启服务。管理员身份在 PowerShell 里执行Restart-Service TermService -Force或者用传统方式net stop TermService net start TermService这个操作会中断当前所有远程桌面会话所以如果是线上服务器尽量挑选业务低峰期操作并且先通知一下正在使用服务器的同事。重启完成后重新连进去把会话挂着一两个小时不动回来再看正常情况下不会再掉线。4. 遇到60 分钟后强制断开RDS 授权模式的坑4.1 为什么偏偏是 60 分钟这是 Windows Server 远程桌面领域最经典的灵异事件你连接远程桌面用得好好的突然弹出一条提示说由于没有远程桌面授权服务器可以提供许可证远程会话将在 60 分钟后断开。其中最核心的原因是服务器安装并启用了远程桌面服务RDS角色允许多个用户同时远程登录但这需要批量授权RDS CAL。服务器刚装好 RDS 时系统会给一段宽限期一般是 120 天这个期间不做严格检查。宽限期过了又没有配置许可证服务器系统就开始给每个客户端发死亡通知——60 分钟后踢掉。很多人以为我只要开启远程桌面就会触发这个机制其实不是。单纯开启系统自带的远程桌面默认只允许 2 个管理会话不会触发 RDS 授权检查但只要你装了 RDS 角色来承载多用户或者应用发布场景就一定会遇到。另外还有一类特殊情况服务器装好后你可能只用了系统自带的远程桌面但系统上安装了某些组件或打了补丁意外把 RDS 角色带起来了同样会触发授权检查。网上有人反馈windows server 2016 rds服务器升级补丁重启后其他的会话主机提示60分钟后断连大概率就是这个原因。4.2 查看当前 RDS 授权状态先确认你的服务器是否启用了 RDS 角色。管理员 PowerShell 里执行Get-WindowsFeature Remote-Desktop-Services看InstallState如果显示Installed说明这个角色已经装了。再查看授权模式Get-ItemProperty -Path HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM\LicensingCore -Name LicensingMode常见的值有这几个值含义0未知或未设置2每用户模式4每设备模式5未配置授权模式出现 60 分钟断连问题多半是因为值处于未配置状态或者授权服务器不可达。4.3 实操把授权模式固定下来在中小型环境和测试场景里没有独立许可证服务器的情况下可以先通过本地组策略把授权模式固定住避免系统反复去找许可证服务器。打开gpedit.msc进入计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 授权找到设置远程桌面授权模式双击设为已启用然后在指定的 RD 会话主机服务器的授权模式下拉框里选择按用户或者按设备。再找到使用指定的远程桌面许可证服务器如果你确实没有可用许可证服务器就保持未配置或已禁用不要把它指向一个不存在的服务器如果你有内网许可证服务器可以在这里填服务器名。改完同样重启TermService服务Restart-Service TermService -Force重新连接后可以到事件查看器里确认授权状态路径是应用程序和服务日志 → Microsoft → Windows → TerminalServices-RemoteConnectionManager → Operational如果看到事件 ID 为 1055 或 1004 级别的报错多半还是许可证服务器不可达如果只是正常连接日志那就说明授权检查已经稳定了。4.4 关于生产环境许可证的提醒虽然上面这种方法在临时或测试环境里能解决60 分钟断连但我要提醒一句生产环境请务必按正规渠道获取 RDS CAL 许可证。你可以在微软批量许可服务中心配置许可证服务器然后在组策略里把使用指定的远程桌面许可证服务器指向它。我之前见过一个客户为了省许可证费用用上面这种方式撑了大半年后来被微软正版化检查时要求补买。所以如果你做的是正经项目、要长期稳定运行别在这块抱侥幸心理正规授权其实没你想象中那么贵但它能给你省掉无数半夜被叫起来处理断线的痛苦。5. 延长 Windows Server 系统授权过期时间5.1 查看系统还剩多少评估时间评估版 Windows Server 默认可以使用 180 天。你可以在管理员命令行里执行slmgr /xpr弹窗会直接告诉你剩余的宽限期。从 Windows Server 2016 到 2022这条命令都适用Windows Server 2025 也一并兼容。如果想看更详细的信息比如当前授权版本、是否为企业版、剩余重置次数等用slmgr /dlv这个输出信息量很大重点看两个位置一个是状态或许可状态一个是剩余重置计数或Re-arm Count之类字段。有剩余重置计数说明你还能用slmgr /rearm继续重置评估期。5.2 用 slmgr /rearm 重置评估期slmgr /rearm是微软官方提供的、用于重置软件授权评估期的命令它不是破解也不是灰色手段而是 Windows 产品激活机制的一部分主要面向评估部署和测试场景。管理员身份打开命令提示符或 PowerShell执行slmgr /rearm执行成功后会有提示然后必须重启系统新的评估计时才会生效。重启后再跑一次slmgr /xpr你会发现剩余天数又变回 180 天了。这个命令通常可以重复使用几次不同版本和渠道的 Windows Server 限制不太一样有的是 3 次有的是 5 次。你可以通过slmgr /dlv里的剩余重置计数判断还能不能再重置。如果次数用完了系统就会提示已超出重置限制此时就只能用产品密钥激活了。5.3 直接换成正式产品密钥如果你不想反复折腾评估期延长最快的方式是输入正式产品密钥。以 Windows Server 2019 标准版为例管理员命令行执行slmgr /ipk 你的产品密钥 slmgr /ato/ipk是安装密钥/ato是尝试联机激活。如果密钥对应的是 KMS 批量授权版本还需要先配置 KMS 主机地址slmgr /skms kms服务器地址 slmgr /ato这里我必须多说一句网上搜到的各种Windows Server 2016产品密钥Windows Server 2019产品密钥很多是 KMS 批量密钥理论上能激活但激活状态只有 180 天有效期到期还需要再次连接 KMS 服务器续期。如果你没有正规的 KMS 基础设施随时可能掉激活状态。所以有条件的话还是通过微软官方渠道购买许可证或者使用带正版授权的云端镜像省心得多。5.4 次数限制和注意事项实际操作中我有几个心得要分享。第一slmgr /rearm必须在系统评估期还没到完全过期之前用效果最好。如果系统已经进入两小时自动关机模式虽然一般也能执行 rearm但过程中系统随时可能关机操作风险很大。所以建议提前设置提醒在评估期剩 30 天左右就完成重置。第二rearm 之后要重启不重启的话新的评估时间不会生效连带一些服务也会出现异常。第三评估版系统的时间重置不会影响你的数据和已安装程序放心操作。第四如果你已经从评估版输入了序列号但显示无效可以用slmgr /dlv看一下当前系统的版本类型。有些情况下你下载的镜像是 Standard 版但输入的是 Datacenter 版密钥自然无法激活。可以用DISM /Online /Get-CurrentEdition查看当前版本再决定用哪类密钥。6. 实操记录与踩坑总结6.1 我这边的实测环境为了写这篇我在虚拟机和物理机上各测了一遍环境如下项目配置系统版本Windows Server 2016 / 2019 / 2022授权状态评估版已重置两次客户端系统Windows 10 / Windows 11网络环境内网跨网段开启方式PowerShell 命令会话超时策略全部改为从不RDS 授权模式按用户模式三台机器均验证了以下结果开启远程桌面后可以正常连接挂机测试 3 小时没有断连系统评估期重置后slmgr /xpr正确显示剩余 180 天RDS 60 分钟断连问题在固定授权模式后不再出现。6.2 改完不起作用的三个原因每次写这种亲测有效的文章都会有人说我照着做了还是不行。根据我自己的经验改完不起作用大多是以下三个原因第一没有以管理员身份运行命令行。PowerShell 和 CMD 必须以管理员身份打开否则你改注册表权限会失败系统提示成功其实是假象。第二改完没有重启 TermService。这是最常见的问题。注册表和组策略不会热加载你不重启服务改完等于白改。第三碰到了域策略覆盖。如果这台服务器已经加入域并且域控制器下发了安全策略本地的组策略和注册表改动会被域策略覆盖。你在本机看到的是从不实际生效的可能是域策略里的15 分钟。这种情况你需要在域策略里调整或者让你的域管理员把相应策略删掉。另外一个隐蔽原因客户端这边的远程桌面连接设置里断开连接会话但不影响服务器上运行的应用程序这类选项也会影响你感知到的掉线行为。像 VSCode 远程连接、PyCharm 远程开发这类工具走的是 SSH 通道不依赖 RDP所以如果你只是想写代码不一定要折腾远程桌面直接配置 SSH 远程开发更轻量。6.3 几点现场经验最后给你几条我踩过坑之后沉淀下来的经验远程连接前先在服务器本机确认 3389 端口监听状态。netstat -ano | findstr 3389如果监听地址不是 0.0.0.0多半是系统服务异常或配置被锁先查这个能省很多时间。不要为了省事关闭防火墙。很多教程教你直接把防火墙关了那是给单机虚拟机省的懒办法生产环境千万别这么干宁可精确放行 3389 端口。修改组策略时尽量精准不要改一刀切。比如只改会话时间限制相关策略顺手把其他安全模板改了容易引发别的问题。评估期延长只是权宜之计。我见过有人把评估版生产环境硬扛了一两年每次到期就 rearm最后某次系统更新后 rearm 计数归零服务器直接宕机。如果业务真的需要 7x24 小时跑踏踏实实搞定授权。这篇文章从开远程连接、延展会话超时、处理 RDS 授权断连、再到重置系统评估授权把远程连接和过期时间这两个最容易让人栽跟头的点都梳理了一遍。实际运维里我没有固定顺序永远是先定位问题再看解决方案你也别照搬先把slmgr /xpr和gpedit.msc看一遍判断清楚自己属于哪一类再动手你会少走很多弯路。最后再分享一个小技巧改完这些设置后我习惯把每个节点的操作命令和输出版本记录下来写成一份简单的操作变更文档。下次再遇到同类问题直接照着文档跑一遍命令十分钟就能解决不用再从头排查一遍。运维这件事最重要的不是技术多炫而是踩过的坑不再踩第二次。
返回列表