LoginSignup
0
0

More than 3 years have passed since last update.

ポートフォワーディングアクセス

Last updated at Posted at 2019-09-16

主に直接アクセスできないようになっているデータベースにアクセスするため、ポートフォワーディングを使用することがありますが、どうも毎回調べちゃう&調べるたびにちょうどピッタリな記事がなかなかないので、備忘用にまとめました。

まず接続

以下、シェルスクリプト(bash)です。
Amazon EC2からRDS(MySQL)に接続する例ですが、それ以外でも使えます。*** で一部マスキングしています。

db_connect.sh
DB_HOST=***.rds.amazonaws.com
LOCAL_PORT=13306

SECRET_KEY=***.pem
SSH_USER=ec2-user
SSH_HOST=***.***.***.***
DEST_PORT=3306
DB_USER=***
DB_NAME=***

CONNECT=`lsof -i -n -P | grep $LOCAL_PORT | wc -l`
if [ $CONNECT -gt 0 ] ; then
    :
else
    ssh -f -N -L $LOCAL_PORT:$DB_HOST:$DEST_PORT -i $SECRET_KEY $SSH_USER@$SSH_HOST
fi

mysql -u $DB_USER -D $DB_NAME -h 127.0.0.1 -P $LOCAL_PORT -p

上記を実行すると、上記の例ではローカルの13306番ポートがリモートのMySQLポートに接続します。(パスワード入力を求められます)

ちょっと修正

MySQL接続まで行く→使用後抜ける→もう一度使う→コネクションが増える→なので、既存の接続がある場合には新たに張らないようにしました。

使用後の切断

$ ps aux | grep " [s]sh"
takepan          66732   (途中略) ssh -f -N -L (以下略)

上記例ではPID 66732がプロセスなので、killします。

$ kill 66732

実行後は、もう一度grepしたり、telnetしたりすると良いかもしれません。

参考

下記を参考にさせていただきました。 :bow:
踏み台の向こうにあるMySQLサーバに一発アクセスする

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0