業務上、毎日3つの異なるOpenVPN接続に接続する必要があります。作業速度を上げるためにシェルスクリプトを使用していますが、もっとうまくいくようです。
現在私のスクリプトは次のとおりです
#!/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時間を提供する)を置き換えることができたらと思います。- openvpn行の上で呼び出しをしました
sudo
。それ以外の場合は、シェルに「スタック」されているように見え、パスワードを入力する機会はありません。
私の質問は:これを達成するためのより良い方法は何ですか?
答え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}