SSHの踏み台有り・無しを,ネットワーク的居場所に応じて自動で切り替える
SSHで何がしかのホストに入るとき,自ホストのネットワーク的な居場所に応じて踏み台使用の有無を自動で切り替えるようなものを書いてみた.
やりたいこと
自分の居場所に関係無く,同一コマンドでSSHできるようにすることが最終的なゴール.
あるネットワークAからは踏み台無しでSSHできるけども,それ以外のネットワークからは踏み台を通さないとSSHできないようなホストがあるとする.
今までは,$HOME/.ssh/configに
Host univ-server1 Host server1.example.jp Host univ-server1-outside Host server1.example.jp ProxyCommand ssh univ-proxy nc %h %p Host univ-proxy Host proxy.example.jp
と書いておいて,ネットワークAからは
$ ssh univ-server1
ネットワークA以外からは
$ ssh univ-server1-outside
と叩くようにしていた.
これを,自分の居場所に関係無く
$ ssh univ-server1
と叩けば入れるような状況にしたい.使い分けが面倒だし.
方法
$HOME/.ssh/configを以下のような感じで書く.ssh-autoproxy.pyはgithubから持ってきて適当にパスの通った場所へ.
Host univ-server* ProxyCommand ssh-autoproxy.py univ-proxy %h %p 192.0.2.0/24 198.51.100.0/24 Host univ-server1 Host server1.example.jp Host univ-server2 Host server2.example.jp Host univ-proxy Host proxy.example.jp
上記の例では,192.0.2.0/24と198.51.100.0/24以外からは踏み台が必要なホストを想定している.
これで,踏み台使用の有無に関係なく,
$ ssh univ-server1
を叩けば入れるようになる.
Know issue
- インターネット接続性が無いと,アレな挙動を見せる
- v4/v6 dual stackな環境だと,アレな挙動を見せる
Code
githubからどうぞ.ipaddrモジュールはPEP 3144版が必要なので注意.