FortiClient 里没有保存密码选项?决定权在网关
能否保存密码由网关决定。请先检查门户设置,然后优先选择导出与恢复,而不是修改注册表。
你装好 FortiClient,连上公司的SSL VPN,却发现根本没有“保存密码”这个控件。重装客户端不会让它出现,删掉隧道再重新添加也没用。在 SSL VPN 配置里,客户端能不能保存凭据完全由防火墙决定。因此,这个勾选框不见了,通常意味着策略来自网关,而不是安装程序出了问题。
在动手改文件之前,这个区别很重要:这两条路里,一条是与防火墙管理员沟通,另一条是会被覆盖的实验室操作。
动终端之前,先看门户
请负责 FortiGate 的人打开你隧道指向的 SSL VPN 门户,查看它的保存密码设置。当该选项被禁用时,FortiClient 本来就应当隐藏这个控件并拒绝保存凭据。终端是在遵守规则,而不是出了故障。
一个快速测试就能把策略和配置损坏分开:先登录一个仍允许保存的门户,再回到你自己的门户。如果在允许保存的门户上出现控件、在受限门户上消失,那就到此为止,去申请修改网关。下面的内容都是针对实验租户或测试配置的现场操作,没有一项能压过服务器端的决定。刷新配置或升级客户端都会覆盖本地修改。
Windows 把标志位放在隧道键里
已保存的隧道位于当前用户下,每个连接一个键,可见性标志就在连接详情的旁边:
HKEY_CURRENT_USER\SOFTWARE\Fortinet\FortiClient\Sslvpn\Tunnels<tunnel name> show_remember_password = 1
把值设为 1,从托盘退出客户端而不是直接关窗口,然后重新打开。在 5.x 版本中,同一个标志位可能位于 HKEY_LOCAL_MACHINE 的 Wow6432Node 分支下,所以当按用户的键不存在时去那里看看。某些 6.x 版本会在连接成功后重写该值,这解释了一个勾选框为何能撑过一次登录、下次却消失。如果你的键里完全没有这个值,就新建一个字符串值,不要猜别的名字。
把注册表当作调试步骤。注册表的实时状态对下一位管理员不可见,任何资产清单刷新都不会保留它。
在 macOS 上,跟踪客户端进程来找到它的文件
macOS 客户端把每个连接的设置放在 /Library/Application Support/Fortinet/FortiClient/conf 下,每条隧道一个字典。要设置的是 AllowSavePassword,它需要读作 1,同时同一字典里的自动连接键必须保持完好。改完后重启客户端。
在陌生的版本上猜文件名只会浪费时间。添加隧道时运行 opensnoop,然后读取客户端碰过的路径;它写过的那个文件才是带着标志位的文件。关掉客户端再改那个文件,事情就结束了。五分钟的跟踪每次都胜过全盘搜索。
优先采用导出、修改再恢复的流程
较新的客户端允许把整份配置通过一个文件来回搬运,这比直接动注册表更容易重复,也更容易交给另一台机器:
- 从客户端设置中导出,包含用户设置,并设置导出密码。
- 打开文件,把 show_remember_password 设为 1。
- 在客户端里打开锁;锁着的时候“恢复”什么也不会做。
- 恢复改好的文件并输入导出密码。
下次登录时控件应该就会出现。把导出的文件放在共享文件夹和工单附件之外,因为它们描述了你的隧道,还可能带着加密的密钥。
如果恢复有效,但连接之后勾选框又藏了起来,那就是网关在每次登录时重新施加策略,任何本地文件都留不住这个设置。
在它变成账户锁定之前清掉密钥
Linux 命令行客户端根本没有勾选框,所以用包装脚本通过 stdin 喂密码是常见做法,而且它什么都不存。在任何平台上,可靠的移除方式都是把连接改回登录时询问,或者干脆删掉隧道。
保存下来的凭据会比那次让它失效的密码更改活得更久,由此产生的失败看起来就像 VPN 中断:拒绝、重试,然后账户被锁。换密码之前先清掉保存的值,并翻一遍隧道列表,找还带着它的旧条目。密钥是以加密形式存放在客户端存储里的,手动改它没有意义。删掉隧道更快,也不会留下任何东西。
按顺序走一遍:与防火墙管理员确认门户设置,用允许保存的配置证明来源,把注册表或 plist 的修改限制在实验室里,并弄清哪个文件保存着密钥,以便把它清掉。允许保存的门户上却没有勾选框,那是终端的问题,接下来该看的就是客户端日志。