Edited at

sshトンネリングでDMZ内のmysqlにローカルから接続しちゃう

More than 5 years have passed since last update.


やりたいこと

本番環境やステージング環境では、DMZ内にDBを設置するのが常套かと思います。このDBにローカルから直接接続して、手慣れたmysqlクライアントでデータ参照/操作したい場合のお話です。


前提環境


  • 対象のDBに接続可能なappサーバにssh接続可能なこと

  • DBはmysql(この投稿上では)


使えるmysqlクライアント

以下の手順説明ではクライアント側はmysqlコマンドを使いますが、基本的にどんなクライアントでも問題無いはずです。手元では Navicast Essentials for MySqlやrails consoleで接続して便利に使ってます。


手順


  1. sshトンネリング接続を確立する

$ ssh -o TCPKeepAlive=yes user@app.server -NfL 13306:10.0.0.123:3306

# 13306 : local側の空きポート番号
# 10.0.0.123 : appサーバから見たdbサーバアドレス
# 3306: dbサーバのmysql接続用ポート


  1. mysqlに接続する@ローカル

$ mysql -h 127.0.0.1 -P 13306 -p

# "localhost"ではなく127.0.0.1
# sshトンネリングで設定したポート番号に接続


問題点



  • サーバ側の設定次第ですが、何も操作しない時間がある程度経過すると、ssh接続を切断されてしまうので、その都度つなぎ直す必要が有ります。

    -> tsuyoshi_choさんにKeepAlive+ServerAliveIntervalを教えてもらって解消しました。ありがとうございます!

  • 危ない技なので取り扱い要注意!