MySQLに踏み台サーバ(ssh)経由でアクセスする方法

データベースのメンテナンスなどの用途で、特定のクライアント・マシンからのデータベースへの接続をssh経由で行うような設定を既にしている場合、 このノートで説明する方法で、そのクライアント・マシンにインストールしたExploratoryデスクトップから、その設定を利用してデータベースにssh経由で接続することができます。

上記のような事情がない場合には、Exploratoryからデータベースにセキュアに接続するには、SSLを使ったポートをデータベースに設定して、Exploratoryからはそちらのポートに接続することをおすすめします。

sshのキーを取得

すでに、MySQLワークベンチ等でssh経由の接続をしていれば、 MySQLワークベンチの設定を見ればどのsshのキーが使われているかが分かるのでそれを利用する。

デフォルトの場所(~/.ssh)になければ、Macのターミナルや、Windowsであればgitbashなどを使って、登録する。

$ ssh-add <ssh_keyのファイルパス>

sshトンネルの作成

Macであればターミナルを、WindowsであればgitbashやPuttyなどを使って、sshのトンネルを作る。

ちなみにWindowsの場合、MobaXtermというGUIツールで設定することもできる。

SSHの踏み台サーバー上でDBが動いている場合

sshコマンドのシンタックスは以下の通り。

ssh -P {SSH_PORT} -N -L {LOCAL_PORT}:{LOCAL_HOST}:{DB_PORT} {SSH_OS_USER}@{SSH_HOST_WHERE_DB_IS_RUNNING)}

例えば MySQL が example.com3306 番で動いていて、そのサーバが 20022番のポートでsshの接続を受け付ける場合を考えてみる。このときにローカルのホスト (127.0.0.1)のポート3307でDBの接続ができるようにするには以下のようにsshを実行する。

ssh -p 20022 -N -L 3307:127.0.0.1:3306 some_user@example.com

例:

SSHの踏み台サーバーとDBサーバーが別のサーバーの場合

sshコマンドのシンタックスは以下の通り。

ssh -P {SSH_PORT} -N -L {LOCAL_PORT}:{DB_HOST}:{DB_PORT} {SSH_OS_USER}@{SSH_HOST_WHERE_DB_IS_RUNNING)}

例えば MySQL が db.example.com3306 番のポートで動いていて、SSHの踏み台サーバーがssh.example.com20022番のポートでsshの接続を受け付ける場合を考えてみる。このときにローカルのホスト (127.0.0.1)のポート3307でDBの接続ができるようにするには以下のようにsshを実行する。

ssh -p 20022 -N -L 3307:db.example.com:3306 some_user@ssh.example.com

Exploratoryデスクトップでデータベースへの接続を作成

プロジェクトのヘッダーメニューから データコネクションを選択

追加ボタンをクリックし

ダイアログで MySQL を選ぶ

ホストに 127.0.0.1、ポートに3307 (上の例でsshのトンネルを作る際に指定した値) を指定する。データベース、ユーザー名、パスワード(必要があれば)を指定する。