为了工作,我每天需要连接到 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 解密包含连接的用户名和密码的文件,然后在建立连接后将其擦除。
这可行,但有一些问题:
- 重复的
cd
s 显得不优雅。 - 我希望该
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}