LoginSignup
86
84

More than 3 years have passed since last update.

SSHトンネルを使ってAWS上のPostgreSQLに接続する

Last updated at Posted at 2015-07-15

2021/1/25 追記
5年以上放置していたのですが、未だにたまにストックされるので修正しました。
メンテされていなかったのでツールを使用した接続方法についての記述は削除しています。

前提

ローカル環境のMacからAWS上に存在するPostgresql(RDS)へ接続を行いたいが、RDSは特定のEC2等にしかポートを解放していないという場合の接続方法。

  • ローカルから直接RDSに接続できない(セキュリティ的に正しい)
  • 対象のRDSに接続可能なEC2は存在する(セキュリティグループの設定とかでよしなに設定されている)
  • 上記のEC2にローカルからSSHできる

トンネルを掘る

ssh -N -L [ローカル側で転送に使用するPort(10000〜60000)]:[RDSのHostName]:[RDSが解放しているPort] -i [IdentityFile(秘密鍵のパス)] -p [踏み台が解放しているPort] [踏み台のUser]@[踏み台のHostName]

例:以下の条件で接続する場合

  • Port:12345、秘密鍵:/User/foo/.ssh/rsa_id
  • 踏み台 HostName:10.0.0.1、User:hoge、Port:22
  • RDS HostName:10.0.0.2、Port:5432、User:postgres、database:dev_database
ssh -N -L 12345:10.0.0.2:5432 -i /User/foo/.ssh/rsa_id -p 22 hoge@10.0.0.1
  • -Nは、接続先でコマンドを実行しないというオプション。ポート転送を行う際に指定する。ただし、指定しなくてもいける。
  • -Lは、ポート転送を行うためのオプション。
  • 踏み台へのSSH接続でconfigファイルを使用している場合は、-i以降を簡略化できる。(configでHost:hogehogeで「10.0.0.1」への接続を設定している場合、 ssh -N -L 12345:10.0.0.2:5432 hogehoge で接続可能)

トンネルを使って接続する

psqlコマンドを使用する

psql -h localhost -p [ローカル側で転送に使用するPort] -U [database user name] -d [database name]

一つ前の例で挙げたトンネルを使用する場合

psql -h localhost -p 12345 -U postgres -d dev_database


JDBC接続を行う場合

「Host」に localhost 、「Port」に自分で設定した「ローカル側で転送に使用するPort」を設定する。

Hostに localhost を設定するのが重要

86
84
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
86
84