自动登录的原理
一般情况下,能用 Cisco AnyConnect(现称 Cisco Secure Client)的场景,基本都可以用 OpenConnect 替代。从便捷到进阶,本仓库提供了对应的脚本,辅助自动登录学校(或类似配置的)VPN。
目前 Cisco 基本都启用了双重认证:先输入 VPN 地址,然后输入账号、密码,接着输入二次验证码 —— 也就是常见存储在 Google Authenticator、iCloud 钥匙串、Microsoft Authenticator 中的那个 6 位验证码。
验证码没有黑盒
这个验证码本质上是基于一个固定的 Base32 密钥和当前时间戳计算得到的(TOTP)。只要在绑定 2FA 时提取到这个固定密钥,就可以自己算出验证码,从而实现全程自动登录:
- Unix 平台:使用
oathtool工具,OTP=$(oathtool --totp -b "$SECRET") - Windows 平台:使用
totp-go命令行工具,totp-go "$SECRET"
请像保管密码一样保管这个密钥
任何拿到这个密钥的人都可以无限期地为你的账号生成有效的二次验证码 —— 它不像单次验证码那样会失效。
切勿把填入了真实用户名 / 密码 / 密钥的配置文件提交到(哪怕是私有的)代码仓库。本仓库中的 config.bat / config.sh 都只是占位模板,请在本地填入真实信息后不要把这部分改动提交到 git。
选哪条路
| 你想要 | 用 |
|---|---|
| 官方客户端,一条命令 / 双击一下就连上 | Cisco 命令行:macOS / Linux 或 Windows |
| 只让部分应用走 VPN,或者和别的代理串起来 | Docker 化的 OpenConnect,1080 端口 SOCKS5 |
移动端
- iOS:无法做到完全自动化,顶多是借助自动填充功能填入验证码。
- Android:本仓库暂未研究。
仓库结构
.
├── Cisco/
│ ├── unix/
│ │ ├── cisco-vpn.sh # 基于 oathtool + `vpn -s`(脚本化 stdin)实现 connect/disconnect
│ │ ├── config.sh # 你的 VPN 地址/账号/密码/TOTP 密钥(模板)
│ │ └── install.sh # 一键安装脚本(curl | bash)
│ └── win/
│ ├── cisco-vpn.bat # 双击运行的入口脚本,用 totp-go 生成验证码并写入 vpncli.exe 的脚本化输入
│ ├── config.bat # 你的 VPN 地址/账号/密码/TOTP 密钥(模板,变量名与 unix 端一致)
│ ├── icon/ # 桌面快捷方式用到的 connect.ico / disconnect.ico
│ └── install.ps1 # 一键安装脚本,顺带安装 totp-go,还能创建桌面快捷方式(irm | iex)
└── Openconnect/
├── openconnect-setup.sh # OpenConnect + microsocks 的 Docker 部署(更轻量)
└── openconnect-gost-setup.sh # OpenConnect + gost 的 Docker 部署(功能更全)