SSH経由でMySQLを接続する方法(SSHポートフォワード)
こんばんは、さすがに眠くなってきた@9ensanです。
サーバー環境にMySQLは入っているがphpMyAdminをインストールしたくないし、危険だからMySQLのポートなんか開放したくないと言う時に便利なのがSSHのポートフォワード機能。
何が便利なのかというとSSHのポートフォワード機能を利用すると、ローカルの任意のポートに来たデータを、サーバー側の指定したポートへ転送することが可能です。
要するにサーバー側にSSHでログイン出来る環境さえあればクライアントからSSHを経由してMySQLに直接つなぐ事が出来るということです。
ですので、この機能を使えば「Sequel Pro」のようなGUIベースのMySQLクライアントアプリを利用して、サーバーのMySQLを操作する事も可能なのです。
(こんな事しなくても、Sequel Proには元々ポートフォワードが簡単に出来る機能がついてますが…。)
どのようにするかというと
ssh -i ~/.ssh/id_dsa test@test.com -p 22 -g -N -f -L 12345:localhost:3306
これで、ローカルの12345番ポートへの通信がSSHを介してtest.comの3306番ポートに転送されるようになります。
なので、
mysql -uroot -p -h 127.0.0.1 –port=12345
このようにMySQLで接続するとサーバ側のMySQLに接続されます。上手く接続されていれば成功です。
SSHオプションについて
もう少し、SSHコマンドのオプションを説明すると
-i | SSHの鍵のパスを指定 |
-p | SSH接続時のポート番号 |
-g | 他のマシンから転送ポートへのアクセスを許可する |
-N | ポート転送を行う |
-f | バックグラウンドに移行する |
-L | 転送するポート:ssh接続先から見たアドレス:転送先のポート |
ちなみに、「-L」はローカル側の任意のポートをssh接続側へ転送するオプションでしたが
「-R」を使用すると逆にサーバ側の任意のポートをローカル側の特定のポートに転送することが可能になります。
これもよく使うのですが忘れるので備忘録がてらに書きました。