matsuo

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 はポートフォワーディング対応以外でもとても便利なツールですので、ぜひお試しください。

https://www.sequelpro.com/

お問い合わせはこちら