Postgresql 如何使用SSH隧道通过EC2实例连接到RDS实例?
这对我来说真的很新鲜,如果这是一个愚蠢的问题,我道歉 我有一个RDS实例,它不能公开访问,并且位于它自己的私有VPC中。我有一个EC2实例可以连接到RDS,但不允许其他任何东西连接到该实例 我现在希望PgAdmin能够显示来自我的RDS实例的数据 我在PgAdmin中完成了向导,我将EC2实例的公共IP作为隧道主机,用户名是Postgresql 如何使用SSH隧道通过EC2实例连接到RDS实例?,postgresql,amazon-web-services,amazon-rds,pgadmin,Postgresql,Amazon Web Services,Amazon Rds,Pgadmin,这对我来说真的很新鲜,如果这是一个愚蠢的问题,我道歉 我有一个RDS实例,它不能公开访问,并且位于它自己的私有VPC中。我有一个EC2实例可以连接到RDS,但不允许其他任何东西连接到该实例 我现在希望PgAdmin能够显示来自我的RDS实例的数据 我在PgAdmin中完成了向导,我将EC2实例的公共IP作为隧道主机,用户名是EC2 user,身份验证是通过身份文件(使用我用来ssh到实例中的pem文件) 但是,我仍然无法连接。在Advanced选项卡中,PGAdmin要求提供主机地址,但在我放入
EC2 user
,身份验证是通过身份文件(使用我用来ssh到实例中的pem文件)
但是,我仍然无法连接。在Advanced选项卡中,PGAdmin要求提供主机地址,但在我放入RDS实例的端点时会发出投诉
我如何让我的本地pgAdmin现在访问我的数据库,而该数据库已无法通过公共互联网访问
---忘记添加错误消息
Unable to connect to server:
Failed to create the SSH tunnel.
Error: Could not establish session to SSH gateway
您似乎希望使用带有端口转发的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
当然,您可以在端口转发连接中使用不同的端口号。如果将多个连接转发到不同的数据库,这将非常有用。但是,如果可能的话,我希望保持它们不变。为了在PgAdmin中使用SSH隧道重现您的情况,我做了以下操作:
- 启动了一个Amazon RDS数据库,包括:
- 公共可访问性:否
- 安全组:允许从
(专有网络的CIDR)通过5432进行入站访问10.0.0.0/16
- 在同一VPC中启动了可公开访问的Amazon EC2实例
- 将PgAdmin“SSH隧道”配置为:
- 隧道主机:使用了我的EC2实例的DNS名称
- 隧道端口:22
- 用户名:
ec2用户
- 身份验证:身份文件
- 标识文件:使用了密钥对,我将使用SSH进入实例
- 将PgAdmin“连接”配置为:
- 主机:来自Amazon RDS控制台的端点
- 端口:5432
- 启动Amazon RDS数据库时设置的数据库、用户名、密码
您看到了什么错误?能否确认可以从EC2连接到RDS主机(请尝试telnet$YOURHOST 5432)。无法连接到服务器:无法创建SSH隧道。错误:无法建立到SSH网关的会话^^请稍候,我还要将此添加到问题
无法建立到SSH网关的会话
表示您到EC2实例的连接不工作。你能用SSH从本地机器连接到那个主机吗?仔细检查您在SSH Tunnel
对话框中输入的凭据是否匹配。据我所知,主机名也应该可以。我记得上次我尝试使用pgAdmin4使用SSH tunnelling时,如果标识文件没有密码保护,它将无法工作。这正是我所需要的,因为我还使用了公司代理来进行SSH