远程桌面死活连不上,一直提示「您的凭据不工作」的排查日记

mistakey 投稿日時は 1 時間前 3 表示


前几天想从另一台机器连回这台,RDP 死活不让进,输完凭据就弹「您的凭据不工作」。用户名换成邮箱、换成 机器名\用户名、旧密码也试了,一样。

实际上这已经不是我第一次遇到这个问题了,但之前我一直都懒得去折腾,想着既然UU远程能用就算了吧,但这次我遭遇了dsh的大肥鱼为了解决 ESC 卡键问题关了UU远程之后,想再把它拉起来却没成,害我直接和设备断了联的难绷情况(
于是我想了想,现在反正有大肥鱼可以直接给权限帮忙排查了,应该也不算太麻烦,就开始让她帮我排查,不过也还是折腾了半天才定位到,令人感叹(

先说下最后的解决方法,在需要被连的那台机器上,Win+R 开运行窗口跑:

runas /u:MicrosoftAccount\你的微软账户主邮箱 cmd.exe

再输微软账户密码,正确的话会弹出个使用此账户运行的 cmd 窗口,这个窗口直接关掉就行了,密码的hash已经缓存了,马上就能输密码用RDP连了,不用关「仅允许 Windows Hello 登录」,也不用建新本地账户。


我的设备环境是 Win11 Pro,账户是微软账户,设置里开着「仅允许 Windows Hello 登录」,平时我都是用 PIN/人脸 登录的。

一开始大肥鱼按常见思路查(按我说完全没必要,我一开始就说了估计是凭证认证问题,但她还是很菫业地按部就班排查了),先把网络和服务这一层过了个遍:远程桌面开关是开的,TermService 那几个服务都在跑,3389 在 LISTENING,防火墙的 TCP/UDP 3389 入站规则全放行,账户确实在 Remote Desktop Users 里,本机自测 3389 也通。全是好的。

白折腾一轮,丢人大肥鱼,吃我白米饭(

真正的线索,或者说转机?是我再次贴出连接凭据不工作截图后,她终于开始翻事件日志,然后翻出来了,而且这个事件日志还要两份对着看才有意思:

Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -MaxEvents 20
Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational' -MaxEvents 40

第一条里一堆事件 261,意思是「侦听器 RDP-Tcp 收到一个连接」;第二条里,21(会话登录成功)、25(重连成功)一条都没有。

她表示:一边说收到连接了,一边从来没登录成功过,中间夹着的只剩身份验证这一步。
哈哈,我就说吧(

她顺手还确认了下账户:

Get-LocalUser <用户名> | Select-Object Name, PrincipalSource
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI').LastLoggedOnProvider

PrincipalSource 是 MicrosoftAccount;LastLoggedOnProvider 是 {D6886603-9D2F-4EB2-B667-1971041FA96B},NGC,也就是 PIN / Windows Hello,不是 {60B78E88-EAD8-445C-9CFD-0B87F74EA6CD}(PasswordProvider)。等于说这台机器平时压根没用密码登录过,一直是用 PIN。


原因其实挺简单:RDP 的网络认证只认本机 SAM 里存的那份密码哈希。

一台机器如果从来没在本地用「密码」成功登录过一次(比如当初初始化是用 Authenticator 点批准、之后一路 PIN),本机就根本没有可用的密码哈希。微软账户的密码在云端好好的,坏掉的是这台设备上的那份副本。所以客户端输什么都是失败,而且报错还特别笼统,就那句「您的凭据不工作」,看了半天也不知道到底是哪一步不对。

ps:另一个我当时想不通的现象是,我另一台同样设置的机器 RDP 一直是好的。后来在微软问答里看到有人提到,同一个微软账户在不同机器上的本地密码哈希并不同步,每台机器各有一套。所以「设置一样」真的不等于「凭据状态一样」,那台多半是当初用密码完成过初始化,哈希一直留着。


runas 干的事就是发起一次真正的密码登录,Windows 联网跟微软账户核对通过之后,会把密码哈希写进本机凭据存储,然后 RDP 就能通过密码验证了。

不用重启,不用注销,不用动任何设置,那个开关也可以一直开着。

superuser 上那条高赞答案给的其实是同一件事的另一种做法:关掉「仅允许 Windows Hello 登录」这个开关,锁屏后用「密码」登录一次。原理一样,只是我确实不想关闭这个选项,也不想关了选「密码」方式登录一次再打开这样折腾,所以 runas 就成了绕过去的等价手段。

想确认修好了没的话:

qwinsta

多出一行 rdp-tcp 会话就对了。或者再翻回 LocalSessionManager,看到 21 / 25 出现就是通了。事件消息的措辞会跟系统语言走,认 ID 最稳。


几个后续需要注意的点:

1、改微软账户密码之后记得用同一条命令重跑一遍。重装系统之后要是又用 Authenticator 或 PIN 走的初始化,也是照着重跑一次就行。

2、别拿 RDP 硬试密码。机器上要是配了账户锁定策略,连错几次会把自己锁在外面几分钟,排查的时候很容易越试越乱。

3、补上哈希并不会把你的「密码登录」打开,它只影响网络认证(RDP、SMB 这些),交互式登录还是那个开关说了算,日常照样 PIN、人脸或指纹,锁屏界面一点没变。但反过来,安全上要留个心:改完微软账户密码之后,在哈希刷新之前,用旧密码通过 RDP 仍然进得去。所以如果是出于「密码可能泄露」才改的密码,改完记得立刻在本机跑一次 runas 让它同步,不然旧密码还是一把能用的钥匙。


顺手记一下我没选的几条路:
1、关掉「仅允许 Windows Hello 登录」也能好,但微软那个问答里明确说了光关开关不够,还得从本机改一次密码、再用新密码登录一次,比我这条麻烦多了。
2、新建一个本地账户专供 RDP 也很稳,就是等于多养一个账户,日常用着别扭。
3、关 NLA(把 UserAuthentication 改成 0)在我这儿完全没用,NLA 早就过了,问题是本地没有密码可验。

其实真不想折腾RDP的话,UU远程这种远控挺好的,一般来说也很稳,用着其实也比RDP爽(
但是话又说回来了,为什么想着重新折腾一下RDP呢?还不是因为多条保底更保险,反正我有v4公网ip(
v4公网ip就是爽,有没有懂的?不过没有的话用frp内网穿透RDP端口来连接也是海阔天空嘛(逃


最后留个判据,省得下次再从头查一遍:RemoteConnectionManager 有 261、LocalSessionManager 没有 21 / 25,就说明包已经到机器上了、卡在认证,直接去查凭据,网络和防火墙一律不用碰。反过来,如果连 261 都没有,那才轮到端口、防火墙、端口转发这些去背锅。


参考资料:

superuser 上解释机制最清楚的一条,Stephanie 的回答,没在本机用当前密码登录过哈希就不会被缓存,远程登录不可能成功 https://superuser.com/a/1633513

runas 这条命令的原始出处是同一问题下 angularsen 的评论,后来被 workabyte 整理进回答里(标注了 from: angularsen) https://superuser.com/a/1670772

问题本体 https://superuser.com/questions/1026277/windows-10-remote-desktop-credentials

微软问答里同样问题的案例,提问者也是靠这条命令解决的 https://learn.microsoft.com/en-in/answers/questions/4278666/remote-desktop-with-microsoft-passwordless-account

另一条修复路线,同时提到多机之间密码不同步 https://learn.microsoft.com/en-us/answers/questions/5535944/rdp-your-credentials-did-not-work-root-cause-and-d

中文的同类问题 https://learn.microsoft.com/zh-cn/answers/questions/5580973/rdp-msa

中文社区讨论 https://linux.do/t/topic/262594/16


总之就是这个坑,记下来也供大家参考,不过现在大概也是和我一样直接问ai找ai排查了吧,逃(

この作者はプロフィールを設定していません
最終更新日 2026-10-18