Mac 反复索要 VPN 密码:钥匙串还是账户?
Mac 可能要的是登录钥匙串密码、管理员密码,或者 VPN 账户本身。先读出对话框的归属,再修对存储。
你解锁 Mac,打开 VPN 客户端,隧道还没起来,密码面板就先弹了出来。你输入网关密码,结果不是被拒绝,就是过一会儿面板又回来了。此后从睡眠唤醒、注销或客户端更新之后,它还会再问。那块面板很少是 VPN 服务器在要凭据;通常是 macOS 在请求读取、解锁或修改一条本地记录,而密码属于那条记录的持有者,不是你的 VPN 账户。
先分辨面板背后是谁
四种提示看起来几乎一样,只有一种与网关有关。措辞、请求访问的进程,以及下方点名的条目,会告诉你面对的是哪一种。
| What the sheet says | Whose password it wants | What it does not do |
|---|---|---|
| Enter the password for the login keychain | The local keychain password, normally your Mac login password | It does not authenticate you to the VPN server |
| An app wants to use confidential information stored in your keychain | Approval for that app to retrieve one item | It does not grant privileges at the gateway |
| macOS wants to make changes, and asks for administrator authorization | An admin account on this Mac, for the named setting | It does not change the VPN account password |
| The client itself asks for a username and password to connect | The remote account, certificate or profile credential | It 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 的钥匙串访问请求页面,是那三个按钮究竟授权了什么的标准说明。