Posted at

SSHしたVPC経由でNAT配下のDBに接続する

More than 5 years have passed since last update.

タイトル的に正しいのかイマイチ分かってないですが、DBへの接続が外部ネットワークから実行出来ず、間にVPCを挟んでいる時の接続です。

ssh -f -L 3306:END_POINT_OF_DB:3306 -N USER_NAME@END_POINT_OF_VPC -i KEY_FILE

END_POINT_OF_DB: 繋ぎたいDB

END_POINT_OF_VPC: 踏み台にしたいVPC

KEY_FILE: VPCにsshする時の鍵ファイル(鍵でアクセスするなら)

と言う感じでportfoward出来るみたいです。


RからDBに接続する

繋ぎに行く前にportfowardしてやればおkです

openNatPortForward <- function(){

system('ssh -f -L 3306:END_POINT_OF_DB:3306 -N USER_NAME@END_POINT_OF_VPC -i KEY_FILE')
}

closeNatPortForward <- function(){
system("kill $(ps aux | grep 'ssh\\ -f\\ -L' | awk '{print $2}')")
}

DB使いたいときにopenNatPortFoward()して接続先を開けてやって、使い終わったらcloseNatPortForward()で閉じてます。閉じ方は余りいい方法が思いつかなかったのでプロセスをgrepして殺してます。

注意点としては、DBに接続する際はlocalhostではなく127.0.01を指定しないと上手く行きませんでした。(RMySQLだと)

ch <- dbConnect(dbDriver('MySQL'), host='127.0.0.1', dbname='DBNAME', user='USERNAME', password='PASSWORD', port=3306)

後はこのchを利用すれば、接続先はlocalhostではなくリモートになってます。

portが違う時とかは適宜変えて下さい。

他にいい方法があれば教えて( ゚д゚)ホスィ…。