Bash
通過 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 解密包含連接的使用者名和密碼的文件,然後在建立連接後擦除該文件。
這可行,但有一些問題:
- 重複
cd
的 s 似乎不優雅。- 我希望
sleep
可以替換命令(使 openvpn 有時間使用解密的登錄文件),以便在建立連接後立即進行擦除。- 我已經
sudo
在 openvpn 行上方呼叫了,否則它們似乎會“堆積”在外殼上,並且沒有機會輸入密碼。我的問題是:實現這一目標的更好方法是什麼?
我不確定是否 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}