如何使用SSH隧道通过EC2实例连接到RDS实例?

14

这对我来说是一件新事物,所以如果这是一个愚蠢的问题,我很抱歉。

我有一个 RDS 实例,它不可公开访问,位于自己的私有 VPC 中。我有一个 EC2 实例,它被允许连接到 RDS,但不允许其他任何东西连接该实例。

现在,我想让 PgAdmin 能够显示来自我的 RDS 实例的数据。

我用 PgAdmin 中的向导进行了操作,将 EC2 实例的公共 IP 地址作为隧道主机输入,用户名为 ec2-user,身份验证通过身份文件进行(使用 pem 文件进行 ssh 连接)。

但是,我仍然无法连接。在高级选项卡中,PGAdmin 要求输入主机地址,但当我输入我的 RDS 实例端点时,它会报错。

我如何让本地的 pgAdmin 现在访问我的 DB,而这个 DB 不再可以通过公共互联网访问?

--- 忘记添加错误信息了

Unable to connect to server:

Failed to create the SSH tunnel.
Error: Could not establish session to SSH gateway

1
“Could not establish session to SSH gateway” 表示您与 EC2 实例的连接未能建立。您能否从本地机器 SSH 到该主机?请仔细检查您在“SSH 隧道”对话框中输入的凭据是否匹配。 - Chris Williams
@mokugo-devops 是的,我能够做到,我怀疑我向表单输入错误。身份文件是否应该是我的.pem文件? - praks5432
在连接选项卡中,应该有一个名为“主机名”或类似名称的字段。我相信是这样的。 - Chris Williams
1
据我所知,主机名也应该没问题。 - Chris Williams
1
据我记得上次尝试使用SSH隧道与pgAdmin4连接时,如果身份文件没有密码保护,它将无法工作。 - jjanes
显示剩余11条评论
2个回答

25
为了在PgAdmin中使用SSH隧道模拟您的情况,我执行了以下操作:
  • 启动了一个Amazon RDS数据库,并完成以下设置:
    • 公共可访问性:
    • 安全组:允许来自VPC CIDR(10.0.0.0/16)上5432端口的入站访问
  • 在同一VPC中启动了一个可公开访问的Amazon EC2实例
  • 配置了PgAdmin的"SSH隧道":
    • 隧道主机:使用EC2实例的DNS名称
    • 隧道端口:22
    • 用户名:ec2-user
    • 认证:身份文件
    • 身份文件:使用我将用于SSH登录实例的密钥对
  • 将PgAdmin的"连接"配置为:
    • 主机:Amazon RDS控制台中的终端节点
    • 端口:5432
    • 数据库、用户名、密码是在启动Amazon RDS数据库时设置的

成功连接

如果它对您而言卡住了,请检查安全组是否允许来自EC2实例的入站连接。

SSH Tunnel

Connection


我在这里违反政策,但这是一个非常出色的答案,谢谢!更多人应该遵循这个原则。 - swepab
太棒了!将隧道主机设置为RDS终端点是关键。我在其他地方没有看到这个。 - John Curry
如果您遇到挂起的问题,请检查安全组是否允许来自 EC2 实例的入站连接。这对我来说就是这样了,AWS 不再将其作为默认选择,因此您需要在 EC2/负载均衡器上添加它。 - Taylor Stocks
如果您不想启动EC2实例,7777 CLI可以按需启动一个隧道。 - undefined

20

看起来你希望使用Amazon EC2实例进行端口转发,以访问位于同一VPC中的私有Amazon RDS实例。

以下是我配置此类连接的方法。

1. 确认SSH连接到EC2实例

首先,请确认您可以SSH连接到EC2实例。您将使用类似于以下命令的命令:

ssh -i key.pem ec2-user@IP-ADDRESS

2. 使用端口转发

如果上述方法有效,则修改SSH命令以使用端口转发:

ssh -i key.pem -L 5432:RDS-HOST-NAME:5432 ec2-user@IP-ADDRESS

这将通过SSH将您计算机上的5432端口转发到EC2实例。然后,发送到 localhost:5432 的任何流量都将通过SSH连接进行转发。EC2实例随后将将流量发送到 RDS-HOST-NAME:5432。(将RDS-HOST-NAME替换为RDS数据库的DNS名称)。

3. 将PgAdmin指向该连接

在PgAdmin中,将数据库指定为:localhost:5432

当然,您可以在端口转发连接中使用不同的端口号。如果要将多个连接转发到不同的数据库,则此功能很有用。但是,如果可能,我喜欢将它们保持相同。


这正是我所需要的,因为我也在使用公司代理来进行ssh连接。 - Moshe Shaham
成功了!你救了我的一天,先生! - shamaseen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接