Skip to content

Cisco:macOS / Linux ​

不要启动 GUI 界面,全部使用命令行实现自动化操作。

常规桌面版安装后,CLI 路径是:

/opt/cisco/secureclient/bin/vpn

macOS 也可以选择安装 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。

手动安装 ​

  1. 把 Cisco/unix/cisco-vpn.sh 和 Cisco/unix/config.sh 拷贝到任意目录。
  2. 编辑 config.sh,填入真实的 VPN_HOST、VPN_USER、VPN_PASSWORD、VPN_SECRET。
  3. 赋予执行权限: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 进程之间的管道里,读取完就没了。