主に直接アクセスできないようになっているデータベースにアクセスするため、ポートフォワーディングを使用することがありますが、どうも毎回調べちゃう&調べるたびにちょうどピッタリな記事がなかなかないので、備忘用にまとめました。
まず接続
以下、シェルスクリプト(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
したりすると良いかもしれません。
参考
下記を参考にさせていただきました。
踏み台の向こうにあるMySQLサーバに一発アクセスする