ローカルのphpMyAdminから、SSHトンネル経由で外部サーバーのMySQLデータベースに接続する方法

外部(本番)サーバにはphpMyAdminをインストールしたくない!でも、本番環境データベースへの外部からの接続は許可したくない…そんな時に便利なデータベースへの接続方法です!

前提条件

すでに下記の準備設定が整っていることを前提にこの記事を書いています。

  • ・外部サーバ上でMySQLが問題なく動いている
  • ・外部サーバへローカルからSSH接続できている
  • ・ローカル環境上で、phpMyAdminが問題なく動いている

SSHのポートフォワーディング設定

今回はSSHのポートフォワーディングという機能を使用して、外部サーバのMySQLデータベースに接続します。

下記のコマンドをローカルのTerminalで実行します。

ssh -i ~/.ssh/id_rsa sampleUser@SampleHost.com -p 7777 -N -f -L 12345:localhost:3306

自分のサーバ環境に合わせて、オプション部分を書き換えます。

sshSSH接続するためのコマンド
-isshの鍵のパスを指定するオプション
sampleUserSSH接続先のユーザ名(MySQLユーザ名ではなく、SSH接続のユーザ名)
SampleHost.com接続先のホスト名
-pSSH接続時のポートを指定するオプション
7777SSH接続時のポート番号。デフォルトは22ですが、セキュリティ向上のために変更している場合はその番号を指定
-NSSHトンネルのみに使用することを指定するオプション
-fバックグラウンドで実行することを指定するオプション
-Lポートを指定するためのオプション
12345ローカルで外部MySQLサーバ接続のために使用したいポート番号を入れます。他のプロセスと被らない番号であればなんでも。
3306外部サーバ側のMySQLポート番号を指定します。

他にも色々なオプションがあります

実行すると、SSH鍵のパスフレーズの入力を求められます。
パスフレーズを入力すると、ポートフォワーディングが開始されます。

ポートフォワーディングできているか確認する

下記のコマンドをTerminalで打ち、無事に接続できるか確かめます。

mysql -u userName -p -h 127.0.0.1 -P 12345

userNameはMySQLのユーザ名、12345は先ほどのコマンドで指定したローカル用のポート番号を指定します。
MySQLのパスワード入力を求められますので、入力します。
ログインできれば、接続が成功しています!

phpMyAdminに外部サーバの設定を追加する

phpMyAdminのconfig.inc.phpに、外部サーバへの接続設定を追加します。
標準的な状態であれば、Servers configurationの下に「First server」という設定が既に存在しています。
その下に、今回接続したいサーバの設定を追加します。

/**
 * Servers configuration
 */
$i = 0;

/**
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/**
 * HOGE SERVER
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['verbose'] = 'HOGE VPS';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '12345';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

外部サーバの仕様に応じて適当に設定を変更します。
hostには「127.0.0.1」、portにはSSHコマンドで指定したローカル用のポート番号を指定します。
verboseに適当なサーバ名を指定しておくと、後でログインする時に分かりやすくなります。

ブラウザからログインする

ローカル環境のphpMyAdminにアクセスすると、Server Choiceから、先ほど指定した外部サーバが選べるようになっているはずです。
ローカルのphpMyAdminから、SSHトンネル経由で外部サーバーのMySQLデータベースに接続

MySQLのユーザ名とパスワードを入力の上、ログインできたら、設置成功です!
これでローカル環境のphpMyAdminから、外部サーバのMySQLにSSHで接続できるようになりました。

ポートフォワーディングを終了する時

「ps aux|grep ssh」コマンドをTerminalで入力してプロセスのIDを確認し、「kill [プロセスのID]」で終了します。

例:

$ ps aux|grep ssh
hoge              1530   0.0  0.0  2432804    804 s000  S+   12:59PM   0:00.00 grep ssh
hoge               721   0.0  0.0  2480068   1004   ??  Ss   12:17PM   0:00.02 ssh -i /Users/hoge/.ssh/id_rsa sampleUser@SampleHost.com -p 7777 -g -N -f -L 12345:localhost:3306
hoge               720   0.0  0.0  2445964   2224   ??  S    12:17PM   0:00.02 /usr/bin/ssh-agent -l

$ kill 721

$ ps aux|grep ssh
hoge               720   0.0  0.0  2445964   2224   ??  S    12:17PM   0:00.02 /usr/bin/ssh-agent -l
hoge              1533   0.0  0.0  2432804    804 s000  S+    1:00PM   0:00.00 grep ssh

この記事にコメントする

メールアドレスは公開されません。コメントは管理者による承認後に公開されます。

関連記事

Value Domainで取得した新規取得したドメインに、さくらのレンタルサーバの無料SSL(Let’s Encrypt)を適用させようとしたところプチはまりしたので記録を残します。
続きを読む

macOS Sierraがリリースされてしばらく経ちますが、Sierraにしてからというものの、シャットダウンが異様に遅くなり、困っていました。
シャットダウンを選択後、電源が切れるまで、黒い画面のままへたすると20分以上待たされました。

もろもろリセットやセーフブート、ディスク修復など色々試したのですが、解消できず。
諦めてクリーンインストールしようかな、と思っていましたが、思わぬところでアッサリ解消しました。
続きを読む

DEVONthinkのデータベース同期用に、さくらのVPSにWebDAV入れてみたら5分でおわった。
続きを読む

無料SSL発行サービス「Let’s encrypt」を利用し、さくらのVPS上のサーバをSSL(https)対応しました。
色々引っかかりながらも、複数の独自ドメイン用証明書を取得し、運用することができています。
また同じようなことをする日が来るかもしれませんので、作業記録を残しておきます。

まずは公式の使い方を見ます。
それだけでスムースに完了した方はこの記事を見る必要はありません…。
続きを読む