Cisco:macOS / Linux
不要启动 GUI 界面,全部使用命令行实现自动化操作。
常规桌面版安装后,CLI 路径是:
/opt/cisco/secureclient/bin/vpnmacOS 也可以选择安装 iOS 端的 AnyConnect App,这样还能做到 split tunnel,但功能和稳定性因版本而异。
前置依赖
bash
# Debian/Ubuntu
sudo apt install oathtool
# macOS
brew install oath-toolkit同时需要已经安装好 Cisco AnyConnect / Secure Client(确保 /opt/cisco/secureclient/bin/vpn 存在)。
一键安装
bash
curl -fsSL https://sh.mawenqian.com/cisco-unix-install.sh | bash它会:
- 把
cisco-vpn.sh和一份config.sh模板放到/opt/cisco-vpn(可用INSTALL_DIR=...覆盖;创建该目录需要sudo,和 OpenConnect 的安装脚本一致)。 - 赋予
cisco-vpn.sh执行权限,并软链接到~/.local/bin/ciscovpn。 - 如果
~/.local/bin还不在PATH里,自动往.bashrc/.zshrc/.profile(根据$SHELL判断)追加一行export PATH=...,这样重启终端后ciscovpn才真的能直接调用。追加前会先检查这行是否已存在,重复运行不会重复添加。
以后重新运行这条命令即可更新 cisco-vpn.sh,不会覆盖你的 config.sh。
手动安装
- 把
Cisco/unix/cisco-vpn.sh和Cisco/unix/config.sh拷贝到任意目录。 - 编辑
config.sh,填入真实的VPN_HOST、VPN_USER、VPN_PASSWORD、VPN_SECRET。 - 赋予执行权限:
chmod +x cisco-vpn.sh
使用
bash
ciscovpn connect # 先断开已有连接,再登录
ciscovpn disconnect # 断开连接
# 若手动安装且没有创建软链接:
./cisco-vpn.sh connect
./cisco-vpn.sh disconnect内部是怎么做的
脚本会用 oathtool 现算一个 TOTP 验证码,然后把一段脚本化的命令序列通过管道传给 CLI 的 -s(stdin 脚本化)模式。不管在哪个平台,这个 CLI 都不接受把 connect <host> 直接当命令行参数传入,它只认在自己那个交互式 VPN> 提示符下输入的命令序列;Windows 那边用 vpncli.exe -s 是同一套机制。
bash
printf 'connect %s\n%s\n%s\n%s\n' "$VPN_HOST" "$VPN_USER" "$VPN_PASSWORD" "$OTP" \
| /opt/cisco/secureclient/bin/vpn -s全程不落盘 —— 账号密码只存在于这个脚本和 CLI 进程之间的管道里,读取完就没了。