あるサーバへのMySQLログインがリモートでは出来なくって,SSHアクセスしてからMySQLログインしていたのだけれどこれが面倒だったので あたかもリモートアクセスしているかのようにしれっとログイン 出来る方法を調べてみました。
調べてみるとSSHトンネル?というものを設定するとそれっぽい事が可能?みたいなので試してみました。
SSHアクセスの設定
.ssh/config
の準備
アクセス元環境に以下のような.ssh/config
を作成しておきます。
Host target_server_sql
HostName 192.168.11.101
Port 22
User target_server_user
IdentityFile ~/.ssh/id_rsa
GatewayPorts yes
LocalForward 3307 localhost:3306 # 3307は,アクセス元の空いているポートを。3306のところは,アクセス先(target_server)のMySQLポートを。
基本的にはアクセス先(target_server側)の情報をババッと書いていきます。
LocalForward
の所だけ,アクセス元の空いているポートを記述する箇所があるので注意です。
SSHトンネルを掘る
$ ssh -f -N target_server_sql
しれっとアクセスする
$ mysql -utarget_server_mysql_user -ptarget_server_mysql_password --port 3307 --host 127.0.0.1;
アクセス先(target_server側)のMySQLログインユーザ名やらパスワードやらを入力するのはなんとなくわかると思うけれど,ポートの指定は~/.ssh/config
で設定した 自分の空きポート を指定します。
また,ホストも 自分自身 です。
トンネルを潰す
$ ps aux | grep target_server_sql
hoge 26564 0.0 0.0 59836 1252 ? Ss 0:00 0:00 ssh -f -N target_server_sql
$ kill 26564
使わなくなったり,指定したポートを変えたくなったりしたらとりあえずps
で確認してkill
でOK。