openconnect Linux客户端安装 以及开机自启和登录

1. 安装 OpenConnect 客户端

根据你的发行版选择命令:

Debian / Ubuntu:

复制代码
sudo apt update
sudo apt install openconnect

Fedora:

复制代码
sudo dnf install openconnect

CentOS / RHEL / Rocky / AlmaLinux (需要先启用 EPEL 仓库):

复制代码
sudo dnf install epel-release        # CentOS 7 使用 yum
sudo dnf install openconnect

如果还需要图形界面管理,可以把 openconnect 换成或额外安装 network-manager-openconnect-gnome(Debian/Ubuntu)或 NetworkManager-openconnect(Fedora/RHEL 系)。

1. 获取服务器证书指纹(用于非交互启动)

systemd 启动时没有人能点"接受证书",所以必须先用 --servercert 固定服务器证书的公钥指纹,否则服务会卡在交互确认上。

复制代码
echo | openssl s_client -connect vpn.xxx.cn:8443 -servername vpn.xxx.cn 2>/dev/null \
  | openssl x509 -pubkey -noout \
  | openssl pkey -pubin -outform der \
  | openssl dgst -sha256 -binary \
  | openssl enc -base64

记下输出的 base64 字符串,稍后拼成 pin-sha256:<上面的字符串>。

如果服务器证书由公共 CA 签发且本机 CA 库完整,理论上不指定 --servercert 也能通过系统信任链校验;但加上指纹最稳妥,也能防止中间人替换证书。


2. 手动验证一次连接参数

在做成服务前,先确认组名、用户名、指纹都对:

复制代码
sudo openconnect https://vpn.xxx.cn:8443 \
  --authgroup=ops \
  -u user \
  --servercert pin-sha256:你上一步得到的字符串

此时会提示输入密码,输入后应能连上。确认无误后按 Ctrl+C 退出,再进入自动化的部分。


3. 存放密码并创建 systemd 服务

存放密码(仅 root 可读):
bash

复制代码
sudo mkdir -p /etc/openconnect
echo -n '你的VPN密码' | sudo tee /etc/openconnect/password > /dev/null
sudo chmod 600 /etc/openconnect/password
sudo chown root:root /etc/openconnect/password

创建 /etc/systemd/system/openconnect.service:
bash

复制代码
sudo tee /etc/systemd/system/openconnect.service > /dev/null <<'EOF'
[Unit]
Description=OpenConnect VPN (quickso, group=ops)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/sbin/openconnect https://vpn.xxx.cn:8443 --authgroup=ops -u user --servercert pin-sha256:你上一步得到的字符串 --passwd-on-stdin < /etc/openconnect/password'
KillSignal=SIGINT
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target
EOF

把里面的 你上一步得到的字符串 替换为第 1 步的实际输出。

启用并启动:
bash

复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now openconnect.service

4. 验证

bash

复制代码
sudo systemctl status openconnect.service
sudo journalctl -eu openconnect.service --no-pager

连接成功时日志中会出现类似 Connected as lihuan、Continuing in background 的内容。之后每次开机,systemd 都会按上面的参数自动连接,密码从 /etc/openconnect/password 读取。


5. 常见问题

  • 日志里一直循环重连 :多半是密码错误、组名不对,或指纹不匹配。先把 Restart=always 暂时注释掉,手动执行 ExecStart 里那条命令观察输出。

  • 提示需要额外验证码(MFA/TOTP) :说明服务器在密码之外还要求动态码,仅靠静态密码文件无法完成自动登录,需要引入 TOTP 生成工具配合,配置会复杂不少。

  • openconnect 路径不同 :有的发行版在 /usr/bin/openconnect,用 which openconnect 确认后替换 ExecStart 中的路径。

  • 停止服务 :sudo systemctl stop openconnect.service。由于设了 KillSignal=SIGINT,OpenConnect 会正常退出并恢复路由/DNS。

相关推荐
..Dauntless..1 小时前
【Linux】文件系统(一)
linux·运维·服务器
天空属于哈夫克31 小时前
企业微信API二次开发 赋能私域运营自动化
运维·自动化·企业微信
天远API2 小时前
零信任架构实战:基于天远运营商二要素V即时版构建自动化分时租赁出行会员身份一致性审核网关
运维·人工智能·架构·自动化
九零HTTP2 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
SHENGWEI胜为2 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
极光通讯2 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器
2501_937767163 小时前
面向设计 / 研发部门:终端文件统一归档 + 服务器定时备份实践
运维·安全
GeW4 小时前
新质生产力路线图:从Linux到数据库,企业落地要点都在这
linux
IMPYLH4 小时前
Linux 系统备份与镜像
linux·服务器·网络