Posts 完美解决 anyconnect 免密码登录[Mac]
Post
Cancel

完美解决 anyconnect 免密码登录[Mac]

完美解决 anyconnect 免密码登录 - Mac

为什么anyconnect客户端没有记住密码的功能,难道是为了安全?可是为了这个麻烦,有多少人会把密码存在随手方便拷贝的地方,从而实际结果可能更加不安全。

先看最终效果

菜单栏通过快捷指令一键连接或断开 anyconnect vpn
image.png
spotlight使用
image.png
如果需要还可以把图标放在程序坞
安全方面也不用担心,密码存储在钥匙串(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,就是这个
image.png
点击新建按钮
image.png
填入这几项,名称要和脚本里的 Label 一致(Anyconect-pwd)
image.png

命令行使用

连接 vpn

/Users/<user-name>/bin/anyconnect
第一次连接的时候因为要访问钥匙串,会提示授权,可以直接选择”总是允许”,以后就不用再确认了;不出意外就可以正常连接 vpn 并且打开 anyconnect 客户端显示已经连接

断开 vpn

/Users/<user-name>/bin/anyconnect stop
执行之后会关闭 vpn 连接,并且自动关闭 anyconnect 客户端

设置快捷指令

打开快捷指令app
image.png
先打开设置,确认开启了菜单栏显示和执行脚本的权限
image.png
image.png
然后在选择左侧的菜单栏分类,点击上方的+按钮,添加一个快捷指令
image.png
右侧选择脚本,拉到下方双击”运行Shell脚本”,添加到左侧的编辑框
image.png
连接VPN 的快捷指令就填入连接的命令,如下(注意使用自己的脚本路径)
image.png
/Users/<user-name>/bin/anyconnect
然后关闭窗口,退出之后在快捷指令列表中点右键可以重命名或者改个容易分辨的图表和颜色
image.png
这时候连接的快捷指令就完成了。
接下来用同样的方式再新建一个快捷指令,脚本设置如下(注意使用自己的脚本路径)
image.png
到这里快捷指令设置完成,从菜单栏的快捷指令图表即可找到了。


邀请您关注我的公众号,我将会不时地为您推送独家原创的技术内容分享。
This post is licensed under CC BY 4.0 by the author.

写了个简单的 exe 调用其他命令的工具 runcmd

Stable Diffusion 模型之 Midjourney 开源版 - Openjourney

Trending Tags