一键登录 vpn
公司的 VPN 采用了固定密码加 Google Authenticator 随机密码的两步验证方式,每次在家办公时手动输入连接 VPN,非常麻烦。参考小方同学的文章写了个一键登录 VPN 的 Alfred workflow,本文记录了具体过程。
通过脚本获得 Authenticator Token
安装oath-toolkit,用于通过命令行获得 token。
brew update brew install oath-toolkit
创建$HOME/.otpkeys 文件,输入Token生成码,格式:
「名称」=「生成码」
例:
google=UKPPIDEALLKPYTT9
新建脚本文件 ./oath.sh
:
#!/bin/bash #fork from http://superuser.com/questions/462478/is-there-a-google-authenticator-desktop-client , by Peter Beckman scriptname=`basename $0` if [ -z $1 ] then echo "$scriptname: Service Name Req'd" echo "" echo "Usage:" echo " otp google" echo "" echo "Configuration: $HOME/.otpkeys" echo "Format: name=key" exit fi otpkey=` grep ^$1 $HOME/.otpkeys | cut -d"=" -f 2 | sed "s/ //g" ` if [ -z $otpkey ] then echo "$scriptname: Bad Service Name" exit fi token=`/usr/local/bin/oathtool --totp -b $otpkey` echo $token echo $token | /usr/bin/pbcopy #自动拷贝至剪贴板
打开终端,执行 [脚本名] [名称] 试一试:
~ cat ~/.otpkeys
google=UKPPIDEALLKPYTT9
~ sh ./oath.sh google
123456
如果 oath.sh
脚本输出了6位数字,说明随机 token 生成成功。
脚本连接 VPN
下载安装 Cisco AnyConnect Secure Mobility Client。
编写脚本 ./vpn.sh
用于登录 VPN:
#!/bin/bash if [ $# -eq 1 ] then command=$1 else command='connect' fi if [ $command == 'stop' ] then echo 'stop vpn' /opt/cisco/anyconnect/bin/vpn disconnect exit fi echo 'start vpn' username='[your ldap username]' passwd='[your ldap password]'`sh ./oath.sh [profile_name]` /opt/cisco/anyconnect/bin/vpn -s << EOF connect [vpn address] $username $passwd EOF
然后修改 vpn.sh 中的各项信息:
[your vpn username] [your vpn password] [profile_name] [vpn address]
连接 VPN
./vpn.sh start
断开 VPN
./vpn.sh stop
至此,已经可以通过脚本一键连接、断开 VPN,不需要再输入密码。
脚本下载:https://github.com/nanma/codesnip/tree/master/scripts/cisco-vpn 。
但是程序员的懒惰是无止境的,脚本还需要打开终端敲命令。作为 Alfred 的忠实爱好者,第一反应就是做个 workflow 出来。
编写 Alfred Workflow
因为有了前面的脚本,实现 workflow 是很简单的。只需要两个部件:「Keyword」 和「Run script」,如下图所示:
其中,「Keyword」获得用户输入,将连接(start) 或是断开(stop) 的命令发给脚本,「Run script」调用前面写好的 ./vpn.sh
脚本完成连接、断开。
Workflow 的下载地址:https://github.com/nanma/awesome-alfred-workflows/tree/master/VPN-Toggle 。
参考链接:
- Any connect 命令行用法: http://www.cisco.com/c/en/us/td/docs/security/vpn_client/anyconnect/anyconnect30/administration/guide/anyconnectadmin30/ac15userguidelines.html#32168
- 一键连接VPN,http://fangpeishi.com/happy_vpn.html
- Any connect 命令行参数: http://stackoverflow.com/questions/21533471/cisco-anyconnect-command-line-parse-profile-or-command-line-arguments