リモート作業が増えて、何かと「あーVPN繋がなきゃ」とかなるんですよね。
そして作業が終わってからVPNの接続を切り忘れる...
処理中だけVPNに繋がってくれてればいいのに...
そんなシェルを作りました
vpn
#!/bin/bash -euif[$# == 0 ]then
echo'vpn [on|off|pass "command"]'exit 1
fi
NETWORK_NAME=$(networksetup -listallnetworkservices | grep VPN)
off (){
networksetup -disconnectpppoeservice$NETWORK_NAME}
on (){
networksetup -connectpppoeservice$NETWORK_NAME}case$1in'off')
off
;;'on')
on
;;'pass')
on
trap off exit
eval$2esac
使い方
※ 名前に「VPN」と入っているネットワークが1つしかない想定で、そのネットワークに接続するシェルになっています
- 上記のシェルを
vpn
と名付けて、 chmod 744 vpn
(実行権限を付与)- PATHが通っている場所においてください
(私は自作シェル置き場($HOME/bin
など)を作って、.bash_profile
や.zshrc
にexport PATH=PATH:$HOME/bin
と書いてあります)
例えば、Web開発をしていて、フロントはローカルで起動するけど、APIはVPNを繋いだ先にある場合。$ yarn server
でローカルサーバーが起動するときは、
$ vpn pass "yarn server"
これで、サーバー終了時にVPNも自動的に切れます。
trap
シェルの trap ~ exit
という行でこれを実現しています。exit
のところは err
なども指定できるので、任意の終了シグナルに応じて処理を設定できるはずです。(やってみてない)
ただ、強制終了(9)は受け取れないようで、例えば、サーバーを起動しているvscodeのウインドウをそのまま閉じると、設定した処理は実行されません...
きもち
本当は、文字列としてコマンドを渡すなんてしたくない...
何か良い方法があったら教えて下さい...