MAC Tunnelblick VPN 自动输入谷歌验证码配置指南

前提条件

  • macOS 系统
  • 已安装 Tunnelblick
  • 已安装并配置好 VPN(能正常连接,只是每次需要手动输入验证码)
  • 需要先解绑

第一步:获取 OTP Secret

  1. 打开二次验证配置页面,点击绑定,页面会显示一个二维码
  2. 使用任意二维码扫描工具扫描该二维码,获取类似以下格式的内容:
1
otpauth://totp/****:yourname@xxx.com?secret=ABCDEFGHIJKLMNOP&issuer=<issuer>
  1. 记下其中的 secret 值(如上例中的 ABCDEFGHIJKLMNOP),后续步骤需要用到

注意:完成绑定流程后再继续后续步骤(扫码后按页面提示输入两次验证码完成绑定)。

第二步:安装 oath-toolkit

打开终端,执行:

1
brew install oath-toolkit

安装完成后验证:

1
oathtool --version

能正常输出版本号即可。

第三步:将 OTP Secret 存入钥匙串

打开终端,执行以下命令(将 你的OTP_SECRET 替换为第一步获取的 secret 值):

1
/usr/bin/security add-generic-password -s "Tunnelblick-Auth-VPN配置名" -a "otp-secret" -w "你的OTP_SECRET"

说明

  • -s 后面的 Tunnelblick-Auth-VPN配置名 是钥匙串条目的名称,可自定义,但后续脚本中需要保持一致
  • -a 后面的 otp-secret 是账户名,同样需要和脚本保持一致
  • -w 后面是你的 OTP Secret

验证是否存储成功

1
/usr/bin/security find-generic-password -w -s "Tunnelblick-Auth-VPN配置名" -a "otp-secret"

如果正确输出你的 secret 值,说明存储成功。

第四步:找到 VPN 配置的实际路径

这一步非常关键,脚本必须放在 Tunnelblick 实际加载的配置目录中

根据你安装 VPN 时的选项不同,配置路径也不同:

安装选项 配置路径
仅为我安装 ~/Library/Application Support/Tunnelblick/Shared/<配置名>.tblk/Contents/Resources/
为所有人安装 /Library/Application Support/Tunnelblick/Shared/<配置名>.tblk/Contents/Resources/

如何确认? 连接一次 VPN,然后查看 Tunnelblick 日志:

  1. 点击菜单栏 Tunnelblick 图标 → VPN Details
  2. 选择你的 VPN 配置 → Log 标签页
  3. 在日志中找到 --cd 后面的路径,那就是实际的配置目录

例如日志中出现:

1
--cd /Library/Application Support/Tunnelblick/Shared/<配置名>.tblk/Contents/Resources

那你的脚本就应该放在 /Library/Application Support/Tunnelblick/Shared/<配置名>.tblk/Contents/Resources/ 目录下。

第五步:创建自动应答脚本

在第四步确认的目录下创建文件 static-challenge-response.user.sh,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash -e
otp_pw_name="Tunnelblick-Auth-VPN配置名"
otp_pw_account="otp-secret"

# 从钥匙串获取 OTP Secret
if ! otp_secret=$(/usr/bin/security find-generic-password -w -s "$otp_pw_name" -a "$otp_pw_account"); then
exit 1
fi

# 生成验证码
otp_code=$(/opt/homebrew/bin/oathtool --totp -b "$otp_secret")

# 输出验证码
printf "%s" "$otp_code"

注意:将 otp_pw_name 的值改为你在第三步中 -s 参数使用的名称。

然后赋予执行权限:

1
chmod +x /路径/到/你的配置目录/static-challenge-response.user.sh

如果配置目录在 /Library/...(为所有人安装),需要加 sudo

1
sudo chmod +x /Library/Application\ Support/Tunnelblick/Shared/<配置名>.tblk/Contents/Resources/static-challenge-response.user.sh

第六步:验证

  1. 断开 VPN 连接
  2. 重新连接 VPN
  3. 如果一切配置正确,将不再弹出验证码输入框,自动完成认证

常见问题

Q: 配置完成后仍然弹出验证码输入框?

最常见的原因是脚本放错了目录。 请务必按照第四步确认实际路径,尤其注意:

  • “仅为我安装”和”为所有人安装”的路径不同
  • .tblk 包的名称要和日志中的完全一致

Q: oathtool 命令找不到?

如果你是 Intel Mac,路径可能是 /usr/local/bin/oathtool 而不是 /opt/homebrew/bin/oathtool。运行 which oathtool 确认实际路径,并修改脚本中的路径。

Q: 钥匙串访问被拒绝?

打开”钥匙串访问”App → 找到你创建的条目 → 右键”显示简介” → “访问控制”标签 → 确保允许 security 命令或”所有应用程序”访问。


MAC Tunnelblick VPN 自动输入谷歌验证码配置指南
https://cason.work/2026/03/18/MAC-Tunnelblick-VPN-自动输入谷歌验证码配置指南/
作者
Cason Mo
发布于
2026年3月18日
许可协议