发生什么事了
在排查某台 Windows 10 机器的远程桌面(RDP)问题时,我遇到一个非常诡异的现象:
连接远程桌面时,系统完全不询问用户名和密码,直接进入桌面。
更离谱的是:我明明给账户设置了密码,且并没有保存任何凭据。
这类现象通常意味着:
RDP 在自动尝试某个本地账户的空密码,并且成功了。
最终定位到的根因是:
目标主机上存在启用状态的本地账户,但这些账户被标记为“不需要密码”,导致它们是空密码账户。
而 RDP 在局域网环境下会自动尝试这些账户,从而绕过凭据输入界面。
下面是完整的排查过程与解决方案。
🔍 1. 使用PowerShell检查本地账户密码状态
在目标机上运行:
Get-LocalUser | Select Name, PasswordRequired, Enabled
输出中我发现两个可疑账户:
aaaa PasswordRequired = False Enabled = True
bbbb PasswordRequired = False Enabled = True
这意味着:
- 这两个账户是启用状态
- 但系统认为它们“不需要密码”
- 因此它们是空密码账户
只要目标机允许空密码远程登录,RDP 就会自动尝试这些账户 → 直接登录成功 → 不会弹出密码框。
🛠️ 2. 解决方法:强制要求账户必须有密码
对每个空密码账户执行:
步骤 1:开启密码需求(关键)
net user aaaa /passwordreq:yes
步骤 2:设置真正的密码
net user aaaa MyStrongPassword123!
步骤 3:验证
Get-LocalUser | Select Name, PasswordRequired
你应该看到:
aaaa True
此时:
- 账户不再是空密码
- RDP 不会再自动登录
- 会正常弹出用户名密码窗口
问题彻底解决。
🔍 3. 为何明明设置了密码,但PasswordRequired仍然是False?
这是 Windows 最坑的地方:
如果账户被标记为“不需要密码”,Windows 会拒绝写入密码,但不会报错。
也就是说:
- GUI 设置密码 → 看似成功,但实际上没写进去
- PowerShell
Set-LocalUser→ 也是假成功 - PasswordRequired 永远是 False
- 账户仍然是空密码
- RDP 仍然能直接登录
只有一个命令能真正修改这个标志位:
net user <username> /passwordreq:yes
这是底层 SAM 的开关,其他方法都不会触碰它。
为什么会出现这种“空密码账户”?
常见原因包括:
- OEM 或软件创建的隐藏服务账户
- 管理员误操作
- 系统策略被修改
- 账户曾被禁用/启用,标志位异常
- 使用 Microsoft 帐号登录导致本地密码为空
无论原因是什么,只要:
PasswordRequired = False
Enabled = True
这个账户就会成为 RDP 自动登录的“突破口”。
