LoginSignup
8

More than 5 years have passed since last update.

posted at

updated at

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

やりたいこと

本番環境やステージング環境では、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を教えてもらって解消しました。ありがとうございます!
  • 危ない技なので取り扱い要注意!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8