Bash

通過 shell 腳本連接 3 個 OpenVPN 連接

  • February 6, 2015

為了工作,我每天需要連接到 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}

引用自:https://unix.stackexchange.com/questions/180244