SSHのポートフォワーディングでMySQLに接続する方法

SSHポートフォワーディング(トンネリング)を利用して、外部サーバーで稼働しているMySQLデータベースに接続する方法を紹介します。

 

SSHポートフォワーディングとは

ssh_portforwarding

SSHポートフォワーディングの仕組みがわかってしまえば、今回の話は簡単です。要は上図のように、SSHによって確立された通信経路を利用してクライアントの10000ポートをサーバーの3306ポートにマッピングするわけです。

つまり、このポートフォワーディングが行われているときにクライアントのローカルの10000ポートに接続すれば、サーバーの3306ポートに接続していると変わらないというわけです。

しかも、このとき通信経路はSSHによって暗号化されおり、また接続先のポートがファイアウォール等で閉じられていたとしてもSSHのポートさえ開いていれば利用可能という非常に使い勝手がよい仕組みになっています。

 

ポートフォワーディングを実行する

では、さっそくSSHポートフォワーディングをやってみましょう。以下のコマンドを実行してください。
ssh -f -N -C -L 10000:localhost:3306 user01@xxx.tamurasouko.com -p 22

上記のコマンドを解説します。まずの"-L 10000:localhost:3306"の部分ですが、これはローカルの10000ポートを接続先サーバーの3306ポートにマッピングする、という指定です。次に、"user01@xxx.tamurasouko.com -p 22"の部分では、xxx.tamurasouko.comというサーバーの22ポートにユーザ名user01で接続する、という指定です。この22というポートはSSHの接続を待ち受けているサーバーのポート番号になります。
また、オプションの意味はそれぞれ以下の通りです。

オプション 説明
-f このポートフォワーディングをバックグラウンドで実行する。(必須
-N SSHトンネリングのみに使用する。(必須
-C データを圧縮して送る。

尚、ポートフォワーディングを停止したい場合はps aux|grep sshコマンドで当該プロセスを探し、killすればいいだけです。

 

外部サーバーのMySQLに接続する

外部サーバーの3306ポートでMySQLが通信を受け付け、かつ上記のポートフォワーディングが行われている場合、クライアントは次のコマンドで外部サーバーのMySQLに接続できます。
mysql -u root -p -h 127.0.0.1 --port=10000

portオプションでポートフォワーディングの窓口として設定したローカルの10000番ポートを指定すれば外部サーバーで稼働しているMySQLに接続することができます。

ちなみに"-h 127.0.0.1"を指定していないとうまくフォワーディング できませんでした。-hオプションは接続先を指定するオプションですが、上記の例ではローカルホストの10000ポートを窓口としてサーバーの3306ポートに接続しているわけですから、明示的に接続先がローカルホストであることを示す必要があります。

 

以上になります。今回はMySQLサーバーへに接続でしたが、SSHのポートフォワーディングは他にもいろいろ応用ができそうですね。
⇒ 応用例:[SSH経由でMySQLの準同期レプリケーションを行う]

 

環境

CentOS 6.4
MySQL 5.5.30
openSSL 1.0.0

 

One thought on “SSHのポートフォワーディングでMySQLに接続する方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です