プロキシの設定をいい感じに管理する
はじめに
お久しぶりです,梅雨で憂鬱なさわだです.
UECでは,学内から学外のネットワークへ接続する際にproxyの設定が必要でした.
ラボマシンのみならITCのドキュメントを参照すれば良いですが,
自宅と大学を行き来するMBPやThinkpadはちょっと不便です.そこでちょっと楽になるスクリプトを書きました.
方針
proxyに阻まれてできないと困ることは主にパーケージ管理とgitです.あとは作業GBMを聴くためにネットが使えれば◎
- パッケージ管理 brew/apt 対応
- Git対応
- ProxyのON/OFF
スクリプト
#!/usr/bin/env bash # Author: takuzoo3868 # Last Modified: 10 May 2019. HTTP_PROXY_HOST=proxy.uec.ac.jp HTTP_PROXY_PORT=8080 HTTPS_PROXY_HOST=proxy.uec.ac.jp HTTPS_PROXY_PORT=8080 SHELL_RC=$HOME/.bashrc_local GIT_CONFIG_FILE=$HOME/.gitconfig.local CURL_RC=$HOME/.curlrc environment_on(){ sudo sed -i.bak "/all_proxy/Id" /etc/environment sudo sed -i.bak "/ALL_PROXY/Id" /etc/environment sudo sed -i.bak "/http_proxy/Id" /etc/environment sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment sudo sed -i.bak "/https_proxy/Id" /etc/environment sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment sudo sed -i.bak "/ftp_proxy/Id" /etc/environment sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment sudo tee -a /etc/environment <<EOF all_proxy="socks://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT/" ALL_PROXY="socks://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT/" http_proxy="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT" HTTP_PROXY="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT" https_proxy="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT" HTTPS_PROXY="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT" ftp_proxy="ftp://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT" FTP_PROXY="ftp://$HTTP_PROXY_HOST:$HTTPS_PROXY_PORT" EOF echo "set UEC proxy environment for Linux!!!" } environment_off(){ sudo sed -i.bak "/all_proxy/Id" /etc/environment sudo sed -i.bak "/ALL_PROXY/Id" /etc/environment sudo sed -i.bak "/http_proxy/Id" /etc/environment sudo sed -i.bak "/HTTP_PROXY/Id" /etc/environment sudo sed -i.bak "/https_proxy/Id" /etc/environment sudo sed -i.bak "/HTTPS_PROXY/Id" /etc/environment sudo sed -i.bak "/ftp_proxy/Id" /etc/environment sudo sed -i.bak "/FTP_PROXY/Id" /etc/environment echo "See you UEC, welcome my home!!!" } proxy_on(){ export http_proxy=http://proxy.uec.ac.jp:8080/ export https_proxy=https://proxy.uec.ac.jp:8080/ export ALL_PROXY=http://proxy.uec.ac.jp:8080/ git config --file $GIT_CONFIG_FILE http.proxy $http_proxy git config --file $GIT_CONFIG_FILE https.proxy $https_proxy git config --file $GIT_CONFIG_FILE url."https://".insteadOf git:// echo "set UEC proxy!!!" } proxy_off(){ unset http_proxy unset https_proxy unset ALL_PROXY git config --file $GIT_CONFIG_FILE --unset http.proxy git config --file $GIT_CONFIG_FILE --unset https.proxy git config --file $GIT_CONFIG_FILE --unset url."https://".insteadOf echo "unset UEC proxy!!!" } ## on/off proxy if [ ! -f "$SHELL_RC" ]; then touch $SHELL_RC fi if [ ! -f "$GIT_CONFIG_FILE" ]; then touch $GIT_CONFIG_FILE fi if [ ! -f "$CURL_RC" ]; then touch $CURL_RC fi if [[ $(uname) = "Linux" ]]; then if [[ $(iwgetid -r) == "UECWireless" ]] || [[ $(iwgetid -r) == "LAB-SSID" ]] || [[ $(uname -n) == "LAB-UNAME" ]]; then proxy_on environment_on else proxy_off environment_off fi elif [[ $(uname) = "Darwin" ]]; then AIRPORT="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport" if test "` ${AIRPORT} -I |grep [^B]SSID|awk '{print $2}'`" = "UECWireless" || test "` ${AIRPORT} -I |grep [^B]SSID|awk '{print $2}'`" = "LAB-SSID"; then proxy_on export ALL_PROXY=http://proxy.uec.ac.jp:8080/ export http_proxy=http://proxy.uec.ac.jp:8080/ export https_proxy=https://proxy.uec.ac.jp:8080/ else proxy_off unset ALL_PROXY unset http_proxy unset https_proxy fi fi
運用
複数ある端末(ハッキングラボも含めて)の作業環境を統一するためにdotfilesを使っている事は以前の記事で紹介しました.
あれから色々更新していますが,基本的にこれらを使用することに変わりありません.
今回のproxyスクリプトもPATHの通っている.local/bin
へ配置します.
gitで管理しているbashrcとgitconfigを弄るのは避けたいので共にlocalrcを使うことで回避します.
おわりに
これでターミナル上でset_proxy
と打つだけで繋いでるネットワークを識別してproxyの設定を切り替えてくれるようになりました.今の所,これで事足りていますがまた阻まれる案件があれば修正すると思います.スクリプト含め設定ファイルはいつもの場所に.ではまた.