Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

Macで処理中だけVPNに繋ぐコマンドを作りました

$
0
0

リモート作業が増えて、何かと「あー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つしかない想定で、そのネットワークに接続するシェルになっています

  1. 上記のシェルを vpnと名付けて、
  2. chmod 744 vpn(実行権限を付与)
  3. PATHが通っている場所においてください
    (私は自作シェル置き場($HOME/binなど)を作って、
    .bash_profile.zshrcexport PATH=PATH:$HOME/binと書いてあります)

例えば、Web開発をしていて、フロントはローカルで起動するけど、APIはVPNを繋いだ先にある場合。
$ yarn serverでローカルサーバーが起動するときは、

$ vpn pass "yarn server"

これで、サーバー終了時にVPNも自動的に切れます。

trap

シェルの trap ~ exitという行でこれを実現しています。
exitのところは errなども指定できるので、任意の終了シグナルに応じて処理を設定できるはずです。(やってみてない)

ただ、強制終了(9)は受け取れないようで、例えば、サーバーを起動しているvscodeのウインドウをそのまま閉じると、設定した処理は実行されません...

きもち

本当は、文字列としてコマンドを渡すなんてしたくない...
何か良い方法があったら教えて下さい...


Viewing all articles
Browse latest Browse all 2722

Trending Articles