外部のデータベースサーバーに触るときに気を付けないといけないのが、ログインユーザーとデータの漏洩なんだけど、データベースのポートを公開してしまうとちょっと危ない。社内ネットワークならばいいのだけど、流石に公開済みの WEB サーバーのデータベースのポートを開いてしまうのはかなり危険。
なので、MySQLの場合、phpmyadmin を使ってアクセスをするか、という話が多いのだが、実は、MySQL Workbench から SSH のポートフォワード機能が使えるのを最近知った。最近のレンタルサーバーは SSH が公開されている場合が多いので、この 22 ポートを通して内部の MySQL に接続する。
例えば、先日ラズパイに導入した redmine が使っている MySQL に PC から接続する場合は、こんな感じになる。
どうせ、ローカルなネットワークでしか動かさないので、PC から直接 MySQL に接続してもいいのだが(実際、ちょっと前まではそれしかないと思っていた)、クライアント PC で SSH を使って、サーバー(この場合はラズパイ)で sshd が動いていれば、この ssh 同士でポートフォワードしてくれる。動的に作成される(と思う)ローカルな SSH のポートを通して、ラズパイの22番を呼び出す。ラズパイの ssh がこれを受けて、MySQL の 3306番に接続してくれる。
MySQL Workbench で接続を作るときに、connection method で “Standard TCP/IP over SSH” を選択して各種設定を入力する。通常の SSH と同じように key file も使える。
“Test Connection” で接続を試す。
これが出なくて、ダンマリになる場合は、SSH サーバー名やポートが間違っている可能性が高い。うちの場合、avahi-daemon で *.local で繋がるようにしているのだけど、raspi3.local は接続できるのだけど、VMWare 上の ubuntu.local には接続できなかった。でも、IP アドレスを指定すると通るので、そのあたりもチェックが必要。
これでローカルな MySQL やポートを空けた DB サーバーと同じ用に MySQL Workbench から接続ができるようになる。ちなみに、DB サーバーが WEB サーバーとは別にある場合は、こんな設定になる。
OutServer とあるのが、いわゆる「踏み台」のサーバーで、SSH を公開しているところ。このサーバーから DB Server に接続するという形になる。この SSH によるポートフォワード機能を使うと、MySQL だけじゃなくてリモートデスクトップにも使えるので、難しい VPN の設定をしなくてもいいんじゃないかなと思ったり。