シェルスクリプトを介して3つのOpenVPN接続を接続する

シェルスクリプトを介して3つのOpenVPN接続を接続する

業務上、毎日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は、接続のユーザー名とパスワードを含むファイルを復号化し、接続が確立された後に削除します。

これはうまくいきますが、いくつかの問題があります。

  • 繰り返されるcdsは見るのに悪いです。
  • 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}

関連情報