sshのプロキシ環境を自動切り替え
1. 目的
自宅と職場(あるいは学校など)でノートPCを持ち歩いていると、職場のプロキシ環境に設定したりする。
たとえば、プログラム言語R
はプロキシの設定を書いておかないと、install.packages()
を使えなかったりする。
ssh
も例外ではない。プロキシ環境では、それに合わせて~/.ssh/config
などに設定をしておかなければならない。
しかし、いちいちネットワーク環境が変わるたびに設定ファイルを書き換えていては面倒である。ネットワーク環境に合わせて自動で切り替えてくれると便利だ。
特に、以前紹介した、homebrew-file
を利用する場合、この設定は有効である。
2. 方法
以前の記事
Mac のターミナルで、プロキシ設定を環境に合わせて自動切替 - joker8phoenix's diary
を拡張する。
ここでは、ターミナルを起動するたびに読み込まれる~/.bashrc
を利用する。
2.1. 準備
ここでは、例として、github.com
にssh
接続する場合を考える。
例として、
- プロキシ環境を設定したネットワーク接続名: proxy
- プロキシのアドレス: proxy.example.com
- プロキシのポート: 8080
とする。
2.1.1. ~/.ssh/config
ファイルの準備
まず、ssh
のconfig
ファイルに対して、プロキシ環境でない場合とプロキシ環境の場合の2つを準備する。
ターミナルにて
vi ~/.ssh/config_no_proxy
とし、config_no_proxy
の内容を
Host github.com
User git
Port 22
Hostname github.com
IdentityFile ~/.ssh/id_rsa
とする。
ssh
の鍵をid_rsa
としている。自身の鍵に合わせて、適宜書き換えていただきたい。
さらに、続けてターミナルにて
vi ~/.ssh/config_proxy
とし、config_proxy
の内容を
Host github.com User git Port 443 Hostname ssh.github.com IdentityFile ~/.ssh/id_rsa ProxyCommand corkscrew proxy.example.com 8080 %h %p
とする。
もし
corkscrew
をインストールしていない場合は、ターミナルにて
brew install corkscrew
として、インストールしておこう。
なお、プロキシのアドレスとポートは環境に合わせて適宜書き換えていただきたい。
さらに、ターミナルにて
cp ~/.ssh/config_no_proxy ~/.ssh/config
ln -fs ~/.ssh/config_no_proxy ~/.ssh/config
としておく。こうすることで、ssh
はconfig
を経由してconfig_no_proxy
を読み込むようになる。
2.1.2. ~/.bashrc
に記述
ターミナルにて
vi ~/.bashrc
として、その内容に以下を記述する。
############################# ### proxy trigger setting ### ############################# # 例として、 # システムのネットワーク接続環境の名前が、proxy # プロキシのアドレス: proxy.example.com # プロキシのポート: 8080 # の場合 proxy=http://proxy.example.com:8080 switch_trigger=proxy # ネットワーク接続の名前 # プロキシ環境ではない場合の設定ファイルにリンクを貼る ln -fs ~/.ssh/config_no_proxy ~/.ssh/config if [ "`networksetup -getcurrentlocation`" = "$switch_trigger" ]; then export HTTP_PROXY=$proxy export HTTPS_PROXY=$proxy export ALL_PROXY=$proxy # プロキシ環境の設定ファイルにリンクを貼る ln -fs ~/.ssh/config_proxy ~/.ssh/config fi
ターミナルを起動するたびに、
.bashrc
が読み込まれて、そのときのネットワーク環境を取得し、もしもプロキシ環境であればif
からfi
までに記述した内容が実行される。
これにより、~/.ssh/config
のシンボリックリンクは、ネットワーク環境に合わせて、適切な設定ファイルへとリンク付けされる。
以後、ssh
を利用するときにネットワーク環境を意識する必要はない。とても便利。
なお、
R
でプロキシ環境に合わせる場合は、~/.Renviron
に
http_proxy=http://proxy.example.com:8080/
を記述すると良い。これも、プロキシ用とそうでないものを2つ用意して、同じ方法で利用できる(と思われるが、試していない)。
以上。
参考文献
Yosemiteで、Homebrew環境構築手順(brew, brew cask, brew file)
1. Homebrewの環境構築
1.1. Xcode
Xcodeをインストールしてから、以下を実行し、Command Line Tools
をインストールする。
xcode-select --install
1.2. Homebrew
ターミナルを起動して、以下を実行。
% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
さらに、以下を実行。
% brew doctor
警告の指示通りに解消させておく。
これでHomebrewは利用可。 さらに拡張していく。
2. 拡張(brew-cask, brew-file)
2.1. 準備
2.1.1. Github
git
をインストールしておく。
% brew install git
2.1.2. brew update
brew update
はbrew
で入れたツールのアップデートを確認するコマンド。
とりあえず、動作確認をしておく。
% brew update
git
云々でうまくいかない場合は、以下を実行すると良い。
% cd $(brew --prefix) % git fetch origin % git reset --hard origin/master
2.2. Homebrew-Cask
Homebrew-Caskをインストールする。 通常のアプリをHomebrewで入れられるようになる。
% brew install caskroom/cask/brew-cask
2.3. Homebrew-file
2.3.1 brew-fileのインストール
Homebrew-fileをインストールする。 brewで入れたアプリの管理がとても楽になる
% brew tap rcmdnk/file % brew install brew-file
2.3.2 gitにBrewfileを作成
次に、自分のGithub(無ければ作成しよう)で、Brewfile
という新しいリポジトリを作成する。
2.3.3 gitのBrewfileをセットする
git上にあるBrewfileとMac上のHomebrewをつなげる(クローン作成)。
% brew file set_repo -r [Githubアカウント名]/Brewfile
うまくいったら、
% brew file edit
でBrewfileを閲覧・編集できることを確認する。
はじめは、Brewfileは空っぽなので、
brew file init
によってBrewfileを、現在のbrewのインストール状況によって初期化するとよい。
2.3.4 Brewfileの編集
すでに、さまざまなアプリをインストールしていて、改めてCaskで入れなおしたい場合、以下を実行すると、Caskでインストールできるアプリを炙りだしてくれる。
% brew file casklist
この情報を、brew file edit
でBrewfileに書き込む。
2.4 Homebrewのアップデート
brew
およびbrew cask
で入れたアプリをアップデートする。
2.4.1 brewのアップデート
以下のコマンドにより、アップデートとともに、Brewfileの更新を行ってGithubに同期してくれる。
% brew file update
2.4.2 brew caskのアップデート
caskでは、通常のアップデートだと、古いバージョンのアプリはすべて残っていく使用になっているが、最新版だけ残すためには以下を実行する。
% brew file cask_upgrade -C
古いバージョンも残していたいのであれば、
% brew cask update
でok。