通过 shell 脚本连接 3 个 OpenVPN 连接

通过 shell 脚本连接 3 个 OpenVPN 连接

为了工作,我每天需要连接到 3 个不同的 OpenVPN 连接。我正在使用 shell 脚本来加快速度,但我觉得它可以做得更好。

目前我的脚本是:

#!/bin/bash

cd ~/vpns
sudo openssl aes-128-cbc -d < login.conf.aes > login.conf

cd ~/vpns/live_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &
cd ~/vpns/mgmt_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &
cd ~/vpns/test_vpn
(sudo openvpn --config config.ovpn --auth-user-pass ~/vpns/login.conf) &

cd ~/vpns
sleep 20
wipe -f login.conf

Openssl 解密包含连接的用户名和密码的文件,然后在建立连接后将其擦除。

这可行,但有一些问题:

  • 重复的cds 显得不优雅。
  • 我希望该sleep命令(它给 openvpn 有时间使用解密的登录文件)可以被替换,以便在建立连接后立即进行擦除。
  • 我已经sudo在 openvpn 线路上方进行了调用,否则它们似乎会“堆积”在外壳上并且没有机会输入密码。

我的问题是:实现这一目标的更好方法是什么?

答案1

我不是 100% 确定将用户名/密码组合存储在变量中是否有效 - 如果您的 sudo 配置需要密码,那么它肯定不会有效,但至少您可以实现类似于下面的循环。如果将用户名/密码存储在变量中确实有效,那么您根本不需要使用您的凭据编写文件。

#!/bin/bash
VPNDIR=${HOME}/vpns
CONFIG=${VPNDIR}/login.conf
OCWD=${PWD}

cd ${VPNDIR}
OLDIFS=${IFS} ; IFS=''
CREDS="$(openssl aes-128-cbc -d < login.conf.aes)"
IFS=${OLDIFS}

for Z in live_vpn mgmt_vpn test_vpn; do
   cd ${VPNDIR}/${Z}
   (printf "${CREDS}\n" | sudo openvpn --config config.ovpn --auth-user-pass) &
done

unset CREDS
cd ${OCWD}

相关内容