你解锁 Mac,打开 VPN 客户端,隧道还没起来,密码面板就先弹了出来。你输入网关密码,结果不是被拒绝,就是过一会儿面板又回来了。此后从睡眠唤醒、注销或客户端更新之后,它还会再问。那块面板很少是 VPN 服务器在要凭据;通常是 macOS 在请求读取、解锁或修改一条本地记录,而密码属于那条记录的持有者,不是你的 VPN 账户。

先分辨面板背后是谁

四种提示看起来几乎一样,只有一种与网关有关。措辞、请求访问的进程,以及下方点名的条目,会告诉你面对的是哪一种。

What the sheet saysWhose password it wantsWhat it does not do
Enter the password for the login keychainThe local keychain password, normally your Mac login passwordIt does not authenticate you to the VPN server
An app wants to use confidential information stored in your keychainApproval for that app to retrieve one itemIt does not grant privileges at the gateway
macOS wants to make changes, and asks for administrator authorizationAn admin account on this Mac, for the named settingIt does not change the VPN account password
The client itself asks for a username and password to connectThe remote account, certificate or profile credentialIt does not unlock anything local

关于本地访问的对话框,证明不了服务器端的任何事。网关拒绝会以厂商的错误文本出现在客户端内部,而不是弹出一块询问是否解锁钥匙串的系统面板。反过来同样常见:把网关密码敲进钥匙串面板,只会让记录保持锁定,再多一次失败尝试。

对话框会点名持有者、存储与动作

钥匙串提示管的是取用,而不是对远程任何东西做认证。Apple 对请求对话框的描述很窄:允许一次、始终允许、拒绝,三者只决定那个 App 能否读取已存的条目。三者都不授予网关上的权限,也不改变服务器对你密码的看法。

当请求方是刚更新过的客户端,重新授权是正常的:新版本不再匹配该条目上的访问控制列表,所以 macOS 会再问一次。排查阶段先选允许一次。始终允许是对该 App 的长期授权,对来路不明的辅助进程是错误答案;如果那个二进制文件不是你装的客户端,就拒绝并去查厂商。

要求管理员授权的提示是第三种东西。它点名的是正在被改动的系统设置或受保护的存储,所要的凭据是本机上的管理员账户。并非每个个人钥匙串条目都需要它;网络配置背后的条目通常需要,因为配置属于系统,而不属于你的登录会话。

Mac 的 VPN 密码可能放在哪

钥匙串只是可能的存储之一,不是存储的定义。在系统设置里创建的内建 VPN 配置,会把凭据与网络配置放在一起,作为受管理的系统设置。第三方客户端通常在登录钥匙串里留一条:以服务名作键的通用密码,或以服务器、协议和账户作键的互联网密码。许多较新的 App 改用数据保护钥匙串,那里的条目从不出现在“钥匙串访问”里。

人们在“钥匙串访问”里搜 VPN 名字,什么也没找到,就断定密码没有保存。Apple 的 TN3137 说明钥匙串有不止一种实现;不出现在那份列表里是常态,不是条目损坏的证据。

记录类型同样不能互换。账户密码、私钥口令、客户端证书和 IPsec 共享密钥失败方式不同,修复的地方也不同;重输已保存的密码,对一张被拒的证书毫无作用。如果 Mac 已纳入管理,配置文件是另一个持有者:VPN 配置载荷可以携带凭据并在刷新时重新下发,所以删掉本地条目只是暂时的,直到管理员改动它。

当登录密码与钥匙串密码分家

登录钥匙串通常使用你的 Mac 登录密码,所以两者会分家。管理员从另一个账户重置你的密码、一次恢复流程,或目录变更,都可能让钥匙串仍锁在旧值上,于是 macOS 会来要一个你刚刚并没有设置的密码。

登录时你可能看到系统无法解锁钥匙串的警告。更新它需要旧密码——记得就有用,不记得就白搭。两条诚实的修法:在“钥匙串访问”里选“编辑”→“更改钥匙串“login”的密码”,或者新建一个登录钥匙串,把需要的凭据重新输入一遍。第二个选项会毁掉已存的条目。

不要因为某个 VPN 拒绝旧凭据就重置整个钥匙串:那会波及无关账户,而且仍然定位不到条目。

一条命令就能定下本地与远程之争。直接向钥匙串询问该条目:

security find-internet-password -s vpn.example.com -a [email protected] -g
security find-generic-password -s "Client Name" -a [email protected] -g

使用客户端设置里的服务器与账户。如果你自己去问钥匙串时也弹出同一块授权面板,那么提示是本地的,服务器只是旁观者。如果根本没有这条,说明客户端并没有把密码存在你以为的地方。-g 标志会把密钥打印到终端,所以别在共享屏幕时用。

更新客户端真正读取的那条记录

如果账户在网关那边变了,先在那里改,再通过客户端设置更新已存的记录。手工编辑钥匙串条目并不可靠:客户端可能读的是另一组服务与账户,而受管理的配置文件会覆盖你的修改。

对怀疑过期的条目,先核对服务、账户与协议,再动手删除:

security delete-generic-password -s "Client Name" -a [email protected]

把另一条连接上名字相近的条目删掉,是常见的自伤式故障。删除只作用于本地:它不会吊销网关上的会话,不解绑设备证书,也不改账户密码。

确认修复能扛过重启

连接、从睡眠唤醒、注销再登录,最后重启一次。全程无面板、且客户端状态点名预期账户的干净序列,才算数。提示在哪一步回来,说明你漏了哪一层:更新之后是授权,网络变更之后是客户端自己的提示,重启之后是配置文件在下发状态。

再次碰钥匙串之前,先看客户端里有没有“记住密码”或“总是询问”的设置。有些配置,尤其是按用户认证的 IKEv2,每次连接都会提示,这是设计如此;修钥匙串帮不上忙。

把你改过的条目、拥有它的存储、它所属的账户记下来,下次再弹就只需几秒定位。Apple 的钥匙串访问请求页面,是那三个按钮究竟授权了什么的标准说明。

相关文章