OpenConnect怎么用?用 Shell 简化连接与登录流程

本文介绍 OpenConnect 的使用方法,并通过 Shell 脚本简化连接与登录流程,适合需要频繁使用 OpenConnect 的用户提高操作效率。

9月 15, 2018 · 1 分钟阅读时长 · 472 字 · -阅读 -评论 · 编程开发

在家经常需要VPN到公司,每次操作还是挺繁琐的,所以就想着搞个shell简化操作,这里mark下。

之前的操作

利用Shell简化OpenConnect操作-图1

如图,每次输入还算短的openconect命令、参数是不怎么好记的IP地址、5次交互输入,就这样来了几次,我表示已经受不了,得解决,怎么搞?写Shell!!!

Shell自动化

这里输入的值除了最后一次密码无法脚本化【需要手动手机动态Code】,其余都可以。这里我使用expect去解决这些交互输入。

expect安装

执行命令brew install expect

自动化脚本

具体脚本如下,vpn.sh

#!/usr/bin/expect
# vpn to xxx
spawn sudo openconnect 1.1.1.1
expect "Password" {send "xxxxxxxx\r"}
expect "Enter 'yes' to accept" {send "yes\r"}
expect "Username:" {send "xxx\r"}
expect "Password" {send "xxx\r"}
interact

大功告成,现在VPN只需要

  1. ./vpn.sh
  2. 手动输入手机动态密码

效率显著提升。

openconnect服务化

如果想要更进一步,就是比如开机自动登录,或者VPN后台运行,那么可以把openconnect服务化。

vpn.sh

#!/bin/bash

while true; do
  echo "Starting VPN..."

  echo "你的密码" | /usr/bin/openconnect \
    https://xxx.xxx.org.cn \
    -u xxxxx \
    --servercert pin-sha256:xxxx

  echo "VPN disconnected. Reconnecting in 5 seconds..."
  sleep 5
done

service配置

sudo vi /etc/systemd/system/openconnect.service

[Unit]
Description=OpenConnect VPN
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/home/ubuntu/vpn.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启动


# 启动服务
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable openconnect
sudo systemctl start openconnect

相关文档

Alan H
Authors
开发者,数码产品爱好者,喜欢折腾,喜欢分享,喜欢开源