为什么 Windows 反复索要 VPN 密码
空的密码框可能来自计算机策略、错误的配置文件存储位置,或一种从未保存的认证方式。每种原因都有自己的解决办法。
密码已经保存,复选框也勾上了,下一次连接却仍然索要凭据。这个循环在 Windows 上有三种可能的原因:禁止保存的整机策略、与该账户不在同一存储位置的配置文件,或者配置文件向导从未写入的认证方式。三者的修复位置各不相同,改错地方会带来一种正在推进的安心错觉,而输入框依旧空着。先给原因命名,才能把这个循环变成两分钟的检查。
计算机策略可能禁止保存
远程访问服务配置中的单个值就能关闭整台计算机的凭据保存。只要它处于启用状态,勾选复选框毫无作用,因为客户端没有地方存放这个秘密。因此下一次尝试从空字段开始,任何配置文件级别的设置都无法越过它。这是首先要读的一项,因为它是三种原因中唯一同时影响所有账户的那一个。
reg query "HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters" /v DisableSavePassword
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\RasMan\Parameters" | Select-Object DisableSavePassword在重建连接之前先读取这个值,并把这样配置的计算机视为有意为之而非损坏:零是正常状态,一则会阻止机器上每个配置文件的保存。在受管理的设备上,应请策略所有者去修改,而不是用自己的账户编辑注册表。一次刷新会在一周内恢复旧值,用户便会认定这个修复从未生效。这就是本地修改后来看起来像失败的原因。在与之较劲之前,先问清这项限制是否有意。
配置文件可能在另一个存储位置
Windows 为每个账户保留一份电话簿,另有针对整台机器的一份;在前者中创建的连接对后者不可见。症状是连接缺失,或者提示框从不提供已保存的凭据。列出两个范围各需一条命令,几秒内就能定论。在断定凭据丢失之前先做这一步。
Get-VpnConnection | Format-List Name,AuthenticationMethod,ServerAddress
Get-VpnConnection -AllUserConnection | Format-List Name,AuthenticationMethod,ServerAddress当机器上的每个账户都必须使用时,请用所有用户选项创建配置文件。列表还会在每个名称旁显示认证方式,这能立刻缩小排查范围。范围决定配置存放在哪里;它不会把连接变成设备隧道,也不会把一个用户的凭据分享给所有人。它还影响启动,因为在启动时拨号的服务账户看不到在用户存储中创建的配置文件。
向导可能从未写入认证方式
IKEv2 向导有一个由来已久的粗糙之处。选择用户名和密码认证并不总会被保存,下一次打开向导又会显示通用条目。保存下来的值才是客户端连接时查询的内容,所以缺失的认证方式看起来和缺失的密码一模一样。剩下的就是一个没有认证方式的配置文件,已保存的秘密因而无处绑定。
Set-VpnConnection -Name "Corp" -AuthenticationMethod EAP -AllUserConnection
Get-VpnConnection -Name "Corp" -AllUserConnection | Select-Object AuthenticationMethod
rasphone -l明确设置认证方式可以完全避开对话框,再读回该值即可证明写入了什么。自行回退的值意味着有别的东西在重写这个配置文件。
用注销而不是重新连接来确认
在同一会话内重新连接会复用真实登录才会重建的状态,因此它可能完全掩盖存储位置的问题。注销、重新登录,并在启动连接时观察凭据是被提供还是被索要。然后再运行一次列表,因为配置文件应当出现在预期的存储位置,认证方式也应当仍是你设定的那一个。同一会话内的重试只能证明缓存的凭据还在内存里。
whoami
Get-VpnConnection -AllUserConnection | Format-List Name,AuthenticationMethod
Get-VpnConnection | Format-List Name,AuthenticationMethod
rasdial "Corp"如果提示仍然回来,剩下的候选就是认证方式本身,或者一次策略刷新悄悄恢复了原来的限制。在重装一个从未参与其中的客户端之前,先检查这两项。两者都会在列表输出中留下各自的痕迹。
记录你改动的原因以及证实它的证据。配置文件刷新可能让空框重新出现,而正是这条记录让重复处理变得便宜。