需求描述

  1. 代替 Cisco 的 AnyConnect 客户端;
  2. 可以实现无交互的静默登录;

安装

1
2
3
4
## 安装源
yum install epel-release
## 安装客户端
yum install openconnect

使用

查看帮助

详细设置可以查看帮助。

1
2
## 查看帮助
openconnect -h

脚本

此处使用密码登录,无密码登录需要服务端配合设置证书。
为了实现自动输入密码,使用了管理命令,也可以使用 expect 实现自动执行 Shell 的交互操作。

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
#!/bin/bash
server=服务器地址
group=分组名
user=用户名
password=密码
pid_file=pid 文件路径

## 登录
function login() {
if [ `pidof openconnect` ];then
echo "已登录"
else
echo $password | openconnect -b --pid-file=$pid_file --authgroup $group -u $user --no-dtls $server
## 判断启动状态
if [ `pidof openconnect` == `cat $pid_file` ];then
echo "登录成功"
else
echo "登录失败"
fi
fi
}

## 退出
function logout() {
# 通过 pid 结束进程
kill -9 `cat $pid_file`
echo "注销成功"
}

## [] 计算布尔值,需要前后空格
## "$1" 防止无参,或空格作为一个整体字符串
if [ "$1" == "login" ]; then
login
elif [ "$1" == "logout" ]; then
logout
else
echo 参数输入错误,支持的命令 login 或 logout
fi

别名

在用户或全局环境变量中写入脚本路径的别名,使得脚本可以在当前用户的任意目录中,直接通别名调用。
注:

  1. 环境变量中可以直接执行脚本(即设置自启);
  2. ~/.bash_profile 用户变量;
  3. /etc/profile     全局变量;
1
2
3
4
5
6
7
8
9
## 写入用户变量
echo "alias 别名='脚本路径'" >> ~/.bash_profile
## 刷新变量
source ~/.bash_profile
## 执行
# 登录
别名 login
# 注销
别名 logout

其他

分组

指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## openconnect 授权指令
Authentication:
-u, --user=NAME Set login username
--no-passwd Disable password/SecurID authentication
--non-inter Do not expect user input; exit if it is required
--passwd-on-stdin Read password from standard input
--authgroup=GROUP Choose authentication login selection
-F, --form-entry=FORM:OPT=VALUE Provide authentication form responses
-c, --certificate=CERT Use SSL client certificate CERT
-k, --sslkey=KEY Use SSL private key file KEY
-e, --cert-expire-warning=DAYS Warn when certificate lifetime < DAYS
-g, --usergroup=GROUP Set login usergroup
-p, --key-password=PASS Set key passphrase or TPM SRK PIN
--key-password-from-fsid Key passphrase is fsid of file system
--token-mode=MODE Software token type: rsa, totp, hotp or oidc
--token-secret=STRING Software token secret or oidc token

异常使用

1
2
3
4
5
6
7
8
## 指令
-g GROUP

## 报错
Failed to obtain WebVPN cookie

## 解决,替换指令
--authgroup=GROUP

评论