これまでは、接続先名を変えてProxyCommandの有無を判断していたがssh configのmatchが激しく便利だったので、メモ。
(会社のAP(アクセスポイント)からはProxyCommand、家のAPからはProxy無しでアクセスする設定。)
まず大前提のとして、ssh configの設定はファイルの先頭から評価され最初に見つかったものが適用される。
そして、matchでは設定の上書きはできないことに注意。
- OpenSSHのVersion
 
- Mac(Yosemite 10.10.3 2015/04時点)だと、標準のOpenSSHのversionが6.2なのでMatchに対応していない。(Match対応は6.5から)
 - brew でopensshをインストールして、shellのaliasで対応する。
 - 
install
 
| 
					 1 2  | 
						brew tap homebrew/dupes                                                                                                                                                                                           brew install openssh                                                                                                                                                                                | 
					
: zsh (or bash)
| 
					 1  | 
						alias ssh = /usr/local/bin/ssh                                                                                                                                                                      | 
					
- アクセスポイントの調査
 
Matchのexecは、実行コマンドのstatus codeが0の時に適用される。 Macで接続中のアクセスポイントのSSIDを取得するのは以下のコマンド
| 
					 1  | 
						networksetup -getairportnetwork en0                                                                                                                                                                 | 
					
これとgrepを組み合わせて
特定AP(
| 
					 1 2  | 
						networksetup -getairportnetwork en0 | grep -q '<SSID>' echo $?  | 
					
- ssh configの設定
 
上記を踏まえて、config の設定は以下。
(Host, Proxy等の設定は各自の環境次第。)
| 
					 1 2 3 4 5 6 7  | 
						Host hoge      HostName www.hoge.com      User <userID>      IdentityFile <Private Key> Match exec "networksetup -getairportnetwork en0 | grep -q '<SSID>'"      ProxyCommand connect -s -S <proxy server> -5 %h %p                                                                                                                                             | 
					
何かいろいろ解放された感じ…
  
  
  
  
コメント