我需要使用第三方 Web 服务,该服务只能通过 Cisco AnyConnect VPN 访问。我在 Ubuntu 上使用 OpenConnect 使用主机、用户名和密码连接到此 VPN。
但是,我们不必每次需要连接服务时都手动连接(因为该服务被每天运行的脚本使用),我只想设置一次,并在隧道断开时重新连接。
有没有办法让我们连接openconnect
客户端(或任何其他类似的 Cisco AnyConnect 客户端),以便在连接中断时自动重新连接。
或者,有没有一种方法可以不使用用户名和密码登录并将该配置存储在某处,以便我们可以在进程停止时自动重新启动该进程。
请注意,这一切都在服务器上,因此没有 GUI。
答案1
查看其具有的选项。openconnect --help
:
-u,--user=NAME
Set login username to NAME
--passwd-on-stdin
Read password from standard input
--reconnect-timeout
Keep reconnect attempts until so many seconds have elapsed.
The default timeout is 300 seconds, which means that openconnect
can recover VPN connection after a temporary network
downtime of 300 seconds.
它还支持
--config=CONFIGFILE
答案2
我创建了一个脚本来执行此操作,您必须将DEVICE_NAME
、SERVER_ADDRESS
和更改USERNAME
为PASSWORD_FILE_PATH
包含密码的文件
您可以使用 找到您的 VPN 设备的名称/sbin/ifconfig
。
#!/bin/bash
if ! /sbin/ifconfig | grep -q 'DEVICE_NAME'; then
sudo openconnect -b -q SERVER_ADDRESS -u 'USERNAME' --passwd-on-stdin < PASSWORD_FILE_PATH
fi
答案3
我使用服务文件
/etc/systemd/system/myVpn.service
[Unit]
Description=My Vpn Connection
After=network.target
[Service]
Type=simple
Environment=password=correcthorsebatterystaple
ExecStart=/bin/sh -c 'echo YourPasswordHere | sudo openconnect --protocol=nc YourServerHere --user=YourUserHere --passwd-on-stdin'
Restart=always
然后我就用它运行
systemctl start myVpn
答案4
我的解决方案是:
- 进入 ~/.bashrc 文件并滚动到底部
- 创建一个别名,例如:
vpn-up='openconnect --your options'
- 保存然后关闭终端并重新打开终端
不幸的是,它不会自行重新连接,但我使用--reconnect-timeout = 60,所以至少当与服务器的连接失败时,我根本不会失去连接,而且它比不断寻找整个命令更容易。