web-dev-qa-db-ja.com

ポートトンネリングを使用して、ネットワークの要塞を介してプライベートデータベースインスタンスに接続するにはどうすればよいですか?

私は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を正しく使用していますか?要塞の外で使用する必要がありますか?何かアドバイスをいただければ幸いです。

12
Snubber

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

これを行うと、要塞でプロンプトを使用する必要はありません。

20
Matt Houser