プライベートな環境で「SSH でダイナミックポートフォワード+SOCKS プロキシ」を使っていて、何かの節にSSH のトンネルが切れてしまい、SOCKS に引きずられてインターネットにアクセスできない悲しい事態になったので雑に自動化してみた。
#!/bin/sh
INTERVAL_SEC=5
echo '[SSH Proxy] Turn on socket proxy...'
networksetup -setsocksfirewallproxystate Wi-Fi on
ssh -D 1080 -N user@example.com &
SSH_TUNNEL_PID=$!
echo "[SSH Proxy] Built SSH tunnel [ PID $SSH_TUNNEL_PID ]"
function health_check() {
while true
do
sleep $INTERVAL_SEC
ps -p $SSH_TUNNEL_PID >/dev/null 2>&1
if [ $? -eq 1 ]; then
echo '[SSH Proxy] SSH tunnel is broken!'
networksetup -setsocksfirewallproxystate Wi-Fi off
echo '[SSH Proxy] Turn off socket proxy.'
exit 0
fi
done
}
health_check &
exit 0
使うときは事前に、SOCKS プロキシの設定が必要です。SOCKS Proxy Server として localhost:1080
を指定が必要です。
補足説明
ダイナミックポートフォワード
ターミナルでトンネルを貼る場合は、
ssh -D 1080 -f -N user@example.com
とすればOK. リモートでコマンドを実行する必要が無いので -N
を指定して、 -f
でバックグラウンド実行させることが多い(と思う)。
ダイナミックポートフォワード自体の設定は下記の様に指定することも可能です。
~/.ssh/config
Host tunnel
HostName example.com
User user
DynamicForward 1080
Mac のネットワーク設定
コマンドラインからいろいろ弄れるみたいです。 networksetup
コマンドをみると設定のサンプルが見られます。
めっちゃ出てくるので、
networksetup | grep socks -A3
とかやると、いい感じにSOCKS プロキシの設定方法がわかります。