私はexample.compute-1.amazonaws.com
で一般公開されているネットワーク要塞とpostgres.example.us-east-1.rds.amazonaws.com:5432
のプライベートpostgresデータベースインスタンスを持っています
私は要塞にsshすることができます
$ ssh -i key.pem [email protected]
次に、要塞に入ったら、次のコマンドでsshトンネルを作成します。
$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]
次に、localhostを使用して要塞からデータベースに接続することにより、トンネルが機能することを確認できます。
$ psql -p 5432 -h localhost -U postgres
ただし、データベースにリモートで接続することはできません(要塞にいない場合)。
$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on Host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?
ポート5432で受信トラフィックを受け入れるように要塞のセキュリティグループを構成しました。
ssh -L
を正しく使用していますか?要塞の外で使用する必要がありますか?何かアドバイスをいただければ幸いです。
SSHトンネルを作成しても、開いているポートは外部に公開されません。開かれたポートは、localhost
としてのみ使用できます。要塞から要塞までのトンネルを作成するのが効果的です。
代わりに、ローカルコンピューターから要塞を通るトンネルを作成します。
つまり、接続の一部としてトンネルを作成しますローカルコンピューターから要塞へ。別のSSH接続を作成する必要はありません。
したがって、ローカルでは、次のように実行します。
$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 [email protected]
Postgres.example.us-east-1.rds.amazonaws.comがプライベートIPアドレスに解決されると仮定します。
次に、ローカルにサーバーに接続するには、サーバーがローカルであるかのように接続します。
$ psql -p 5432 -h localhost -U postgres
これを行うと、要塞でプロンプトを使用する必要はありません。