如何使用端口隧道通过网络堡垒连接到私有数据库实例?


12

我有一个可在以下位置公开访问的网络堡垒,example.compute-1.amazonaws.com以及一个在以下位置的私有postgres数据库实例:postgres.example.us-east-1.rds.amazonaws.com:5432

我可以使用以下方法进入堡垒

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

然后,一旦进入堡垒,我将使用以下命令创建一个ssh隧道:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

然后,我可以通过使用本地主机从堡垒连接到数据库来验证隧道是否正常工作:

$ 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正确吗?我应该在堡垒以外使用它吗?任何建议将不胜感激。

Answers:


20

创建SSH隧道时,它不会将打开的端口暴露给外界。打开的端口仅作为可用localhost。因此,有效的做法是创建从堡垒到堡垒的隧道。

相反,您要做的是从本地计算机通过堡垒创建隧道。

因此,您将创建隧道作为从本地计算机到堡垒的连接的一部分。您无需创建另一个SSH连接。

因此,在本地,您将执行:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

假设postgres.example.us-east-1.rds.amazonaws.com解析为私有IP地址。

然后,要连接到仍在本地的服务器,请像服务器在本地一样进行连接:

$ psql -p 5432 -h localhost -U postgres

这样做时,无需在堡垒上使用提示。


这对我有用,谢谢!我为任何使用psql命令的人忘记的一件事只是挂在那儿:确保您的数据库安全组允许从堡垒访问。
Goran

-1

这对我有用。确保在本地安装了psql客户端

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

在AWS上创建数据库实例时,请确保定义以下内容:

  1. 用户名
  2. 密码
  3. 数据库名称
  4. 端口号

我还必须为数据库所在的VPC创建一个安全组。创建它之后,请确保您的数据库实例将其用于此安全组。安全组具有以下规则:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

但是,那不是通过堡垒,对吗?您只是直接连接到RDS
RhysC

它通过暴露了rds实例的vpc。创建后将vpc附加到rds实例。
timxor

是的,我认为最初的问题是关于通过VPC中的堡垒服务器进行的,因此RDS实例未公开公开(这就是我的阅读方式)
RhysC

那不是问题,您的回答根本无助于解决问题。
Radko Dinev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.