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.

SSHによるDynamic port fowardingとSocksプロキシのオンオフを自動でやる

Last updated at Posted at 2022-04-07

動機と目指すこと

  • 学内限定とかのコンテンツを触れる状態で長時間作業したい。
  • ネットワーク遮断とかでsshが死んだときにsocksプロキシの設定を戻さないとwebページ見れなくなるのだるい。
  • ssh接続→socksプロキシonの作業を毎回ポチポチやるのが面倒なので自動化したい。

環境

  • MacOS Big Sur (11.6.2)
  • ポートフォワード飛ばす先にはssh公開鍵によりパスワード無しで入れること前提。(パスワードを都度求められるだけなので実行はできる。)

手順

autossh

ssh接続が切れたら自動で再接続してくれる。brewから簡単に入手できる。

$ brew install autossh

スクリプト組む

スクリプトを組んでいく。ファイルの場所はどこでもいいが、とりあえずデフォルトでパスが通っているところで解説する。

スクリプトを書く。

$ vi /usr/local/bin/sproxy

中身はこれ。

sproxy
#!/bin/zsh
 
port=10080
method='wi-fi'

#--------------------------------------------------------------------
function trap_exit() {
   networksetup -setsocksfirewallproxystate $method off
   echo 'display notification "OFF" with title "proxy"' | osascript
}

trap trap_exit 1 2 3 15
#--------------------------------------------------------------------

networksetup -setsocksfirewallproxy $method localhost $port

echo "Turning on proxy"
networksetup -setsocksfirewallproxystate $method on
echo 'display notification "ON" with title "proxy"'  | osascript

echo "Starting SSH Dynamic Port Forwarding to Port $port..."
autossh -M 0 -D $port -C -Nv host
  • portは好きなのを使っていい(5桁台がベター)。
  • methodは有線ならethernetを指定する。
  • 最後の行のhostは自分のssh接続先を指定。いつもの書き方でok。ログが鬱陶しければvオプションを消しても良い。

実行権限の付与をしておく。

chmod +x /usr/local/bin/sproxy

実行

$ sproxy

これでsocksプロキシがonになった。

終了したいとき

放って置くと常にプロキシを介した通信になる。終了したいときはCtrl+Cでスクリプトを止めてやれば良い。

スクリプトの簡単な解説

  • networksetup -setsocksfirewallproxy $method localhost $portwi-fiのsocksプロキシで利用するサーバーをlocalhost10080ポートに指定している。
    GUIで言うと↓を指定していることに対応する。
    image.png
  • networksetup -setsocksfirewallproxystate $method onはsocksプロキシをonにする。画像で言えばチェックボックスにチェックを入れる作業。
  • autossh -M 0 -D $port -C -Nv hostautosshによるsshコネクションの半永続化をする。-M0を指定すると、ssh切断時に再接続するようになる。その他のオプションは通常のsshと同じ。
  • 最後にtrap trap_exit 1 2 3 15でプロセスの終了前にsocksプロキシのoffをねじ込む。本当はtrap trap_exit EXITだけでいいはずだが、なぜか動かない。。。まあ基本Ctrl+Cでの終了により異常終了シグナルが出るので問題ない。

参考

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?