
SSH のポートフォワーディングを使って MySQL に接続する

SSH のポートフォワーディング機能を使った MySQLの接続方法について、まとめました。どなたかの参考になれば幸いです。
たとえばこういうシチュエーションで
例として、こんな場合を考えてみます。

- WEBサーバと DBサーバとが別構成
- DBサーバには、WEBサーバのIPアドレスからしかセキュリティ上接続できない
- ローカルから WEBサーバへの SSHアクセスは可能
ここで、手元のローカル環境からDBサーバを覗きたい場合、どうしましょう。WEBサーバ上に phpMyAdmin などのツールを置いてそこからアクセスしたくなるかもですが、それをやっちゃうと何のための IP制限……?? となってしまいますので、ヤメ。
このような場合、SSHのポートフォワーディングを使えば、ローカルからWEBサーバを経由しつつDBサーバへのアクセスが可能です。
ポートフォワーディングのイメージ

この図のようなイメージで、SSHでアクセスできる WEBサーバを介して、ローカルからDBサーバなどにアクセスできるようになります。
コマンド例
ポートフォワーディングを使うには、ターミナルから以下のようなコマンドを入力します。
ssh -NL 9999:db_host:3306 ssh_user@ssh_host
ssh で WEBサーバにアクセスしつつ、 -N オプションで、ポートフォワーディングを有効に。また、 -L オプションで「ローカルのどのポート番号を、転送先ホストのどのポート番号に転送するか」を設定します。この例では、ローカルの 9999番を、DBサーバの 3306番に転送しています。(9999 は、任意の使用していないポート番号であれば何でも構いません)
これで転送設定ができたら、別ターミナルから
mysql -h 127.0.0.1 -P 9999 -u db_user -p
こんな感じで、mysqlコマンドを使ってローカルの先ほどのポート番号 9999 に接続します。すると 対応したポートのアクセスが SSH 経由で転送され、DBサーバの MySQL に繋がるという仕組みです。べんり。
Sequel Pro など、SSH経由のアクセスに対応したツールを使う
MySQL向け GUI クライアントの中には、SSH経由のアクセスに対応したものもあります。Mac用だと Sequel Pro などですね。
Sequel Pro を使いますと、

こんな感じで、接続設定画面で SSHタブを選び、DB情報とSSH情報を入れてあげるだけでアクセスできるようになります。
Sequel Pro はポートフォワーディング対応以外でもとても便利なツールですので、ぜひお試しください。