sshの設定でローカルIPとグローバルIPは当然違うが、ユーザから見てHostは同じなので意識せずにアクセスできる設定を書きたい。
その時にHostをinternal, externalとかで分けるのはスマートじゃないのと、それくらいは機械がやってくれよっと思うので調べた。

OpenSSHのMatch構文を使う

OpenSSH v6.5以降でconfigにMatch exec "外部コマンド" で条件を設定できる。
Match Host hoge exec "hoge cmd"
  HostName 192.168.x.x

SSIDで接続先を分ける

Linuxだとiwconfigで無線LANのSSID等を取れるが, Macだとそれはできないので別のコマンドを実行する。
macだとairportコマンドでとれます。ただし、PATHが通ってないのでシンボリックリンクを/usr/sbin配下に置くと楽です。
sudo ln -s airport /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport
Macで無線LANはen1になるのでairportの引数を以下のように設定します。
airport -I en1
その後, 出力される情報内に特定のSSIDが含まれているかをgrepで判定します。
# airport -I en1 | grep -p [ssid]
airport -I en1 | grep -p "SSID"
これをconfigに書くと以下の通り。
# 特定のSSIDの時の接続設定
Match Host my_server exec "airport -I en1 | grep -q my-ssid"
  HostName 192.168.0.1

# もしgrepの文字列をダブルクオートで囲むならエスケープシーケンスで以下の通り
# Match Host my_server exec "airport -I en1 | grep -q $'\x22'my-ssid$'\x22'"

# 上記以外のSSIDの時はこちらの接続設定
Host my_server
  HostName 172.19.0.1
これで共通のコマンドでスマートにネットワークをあまり意識せずに接続することができます。