完美解决 anyconnect 免密码登录 - Mac
为什么anyconnect客户端没有记住密码的功能,难道是为了安全?可是为了这个麻烦,有多少人会把密码存在随手方便拷贝的地方,从而实际结果可能更加不安全。
先看最终效果
菜单栏通过快捷指令一键连接或断开 anyconnect vpn
spotlight使用
如果需要还可以把图标放在程序坞
安全方面也不用担心,密码存储在钥匙串(Keychain)里
具体实现
安装客户端
从官方下载安装即可,下载地址
https://www.cisco.com/c/en_be/products/security/anyconnect-secure-mobility-client/index.html
创建操作 anyconnect 的脚本
anyconnect 本身支持命令行操作,不过如果不启动 gui 程序,不方便查看 vpn 的连接状态,所以脚本里除了管理 vpn 的连接,还自动启动 gui 程序,断开的时候自动关闭 gui 程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
# 保存路径 /Users/<user-name>/bin/anyconnect
# 定义钥匙串的记录密码的Label
KEYCHAIN_LABEL="Anyconect-pwd"
# 替换成 vpn 登录用户名
USERNAME="这里填VPN帐号"
PASSWORD=$(security find-generic-password -wl $KEYCHAIN_LABEL)
# 替换成 vpn 连接的url和端口比如: ssl-vpn.xxx.com:23041
VPN_URL="这里填VPN的连接url(和端口)"
VPN_BIN="/opt/cisco/anyconnect/bin/vpn"
ANYCONNECT_PATH="/Applications/Cisco/Cisco AnyConnect Secure Mobility Client.app"
get_anyclient_ui_pid() {
local pid=$(ps -ef | grep "$ANYCONNECT_PATH" | grep -v 'grep' | awk '{print $2}')
echo $pid
if [[ -z "$pid" ]]; then
return 1
else
return 0
fi
}
kill_anyconnect_ui() {
$VPN_BIN disconnect
local pid=$(get_anyclient_ui_pid)
# echo "PID: $pid"
if [[ -n "$pid" ]]; then
kill -9 $pid
fi
}
open_client_ui() {
if ! get_anyclient_ui_pid &> /dev/zero; then
open "$ANYCONNECT_PATH"
fi
}
connect() {
# sudo /opt/cisco/anyconnect/bin/vpnagentd
kill_anyconnect_ui
$VPN_BIN -s << EOF
connect $VPN_URL
$USERNAME
$PASSWORD
y
EOF
open_client_ui
}
main() {
if [[ -z "$USERNAME" || -z "$PASSWORD" || -z "$VPN_URL" ]]; then
echo "Error: empty user info"
exit 1
fi
case "$1" in
stop|s )
kill_anyconnect_ui
;;
* )
connect
esac
}
main "$*"
给脚本增加执行权限(替换
1
chmod +x /Users/<user-name>/bin/anyconnect
在钥匙串里填入密码
打开钥匙串app,就是这个
点击新建按钮
填入这几项,名称要和脚本里的 Label 一致(Anyconect-pwd)
命令行使用
连接 vpn
/Users/<user-name>/bin/anyconnect
第一次连接的时候因为要访问钥匙串,会提示授权,可以直接选择”总是允许”,以后就不用再确认了;不出意外就可以正常连接 vpn 并且打开 anyconnect 客户端显示已经连接
断开 vpn
/Users/<user-name>/bin/anyconnect stop
执行之后会关闭 vpn 连接,并且自动关闭 anyconnect 客户端
设置快捷指令
打开快捷指令app
先打开设置,确认开启了菜单栏显示和执行脚本的权限
然后在选择左侧的菜单栏分类,点击上方的+按钮,添加一个快捷指令
右侧选择脚本,拉到下方双击”运行Shell脚本”,添加到左侧的编辑框
连接VPN 的快捷指令就填入连接的命令,如下(注意使用自己的脚本路径)/Users/<user-name>/bin/anyconnect
然后关闭窗口,退出之后在快捷指令列表中点右键可以重命名或者改个容易分辨的图表和颜色
这时候连接的快捷指令就完成了。
接下来用同样的方式再新建一个快捷指令,脚本设置如下(注意使用自己的脚本路径)
到这里快捷指令设置完成,从菜单栏的快捷指令图表即可找到了。