0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

openvpnでVPNの初期化後、スクリプトを実行してVPNを終了する

Last updated at Posted at 2021-06-22

特定のshell実行時のみVPN接続を行いたいパターンが出てきましたので作成しました。
※何らかの理由でopenvpnに接続しっぱなしになることも想定しておいてください。

  FILE_OVPN=/tmp/test.ovpn
  FILE_LOG=$(mktemp)
  # VPN接続後に実行したいコマンド
  CMD_JOB="sh /tmp/test.sh"
  # openvpnのオプションは適当に設定してください
  CMD_VPN="sudo openvpn --config ${FILE_OVPN}"
  # 初期化完了時のキーワード
  KEYWORDS=" Initialization Sequence Completed"

  # openvpnをバックグランドで処理し、PIDを「WORK_PID」に受け取ります
  WORK_PID=$((nohup ${CMD_VPN} > ${FILE_LOG} 2>&1) & echo "$!")
  # 初期化が完了するまで待機します。
  # grepに「-m1」を付けていますので、「KEYWORDS」に引っかかると処理を抜けます

-  tail -n0 -f ${FILE_LOG} | grep -q -m1 "${KEYWORDS}"
+  # 下記の待機方法では『SIGPIPE』を受け取らずに?動作しないことがあるようです
+  # github actions の ubuntu ではマッチしても終了が出来ませんでした。
+  #tail -n0 -f ${FILE_LOG} | grep -q -m1 "${KEYWORDS}"
+  # 待機方法を変更しました
+  # こちらのパターンの場合、github actions でも動作します
+  timeout 20s grep -q -m1 --line-buffered "${KEYWORDS}" <(tail -n0 -f ${FILE_LOG})

  # スクリプト実行
  eval ${CMD_JOB}

  # 1. openvpnのプロセスを終了
  # 2. ゴミのログファイルを削除
  kill ${WORK_PID} \
    && rm -f ${FILE_LOG}

AWS VPN Clientは「openvpn」の実行ファイル?を実行しているだけのようです。
※AWS VPN Clientをインストールするとインストール先のディレクトリに「openvpn」の実行ファイルが入っています。
※接続に使用するovpnファイルはopenvpnと同じです。

最終的には

上記の処理をvpn.shに記載をしたとします。
CMD_JOBの部分のみ下記のように修正します。

vpn.sh
  # CMD_JOB="sh /tmp/test.sh"
  CMD_JOB=$1

  # 上記のように実行したいコマンドを引数で受け取るようにします

下記のように実行が出来るようになります。
※ 引数の部分を変更するだけでいろいろなコマンドを実行できるようになります。

# /tmp/test.sh を実行
sh vpn.sh "sh /tmp/test.sh"
# /tmp/test2.sh を実行
sh vpn.sh "sh /tmp/test2.sh"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?