Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何使用SSH隧道通过EC2实例连接到RDS实例?_Postgresql_Amazon Web Services_Amazon Rds_Pgadmin - Fatal编程技术网

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

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要求提供主机地址,但在我放入

这对我来说真的很新鲜,如果这是一个愚蠢的问题,我道歉

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

我现在希望PgAdmin能够显示来自我的RDS实例的数据

我在PgAdmin中完成了向导,我将EC2实例的公共IP作为隧道主机,用户名是
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数据库,包括:
    • 公共可访问性:
    • 安全组:允许从
      10.0.0.0/16
      (专有网络的CIDR)通过5432进行入站访问
  • 在同一VPC中启动了可公开访问的Amazon EC2实例
  • 将PgAdmin“SSH隧道”配置为:
    • 隧道主机:使用了我的EC2实例的DNS名称
    • 隧道端口:22
    • 用户名:
      ec2用户
    • 身份验证:身份文件
    • 标识文件:使用了密钥对,我将使用SSH进入实例
  • 将PgAdmin“连接”配置为:
    • 主机:来自Amazon RDS控制台的端点
    • 端口:5432
    • 启动Amazon RDS数据库时设置的数据库、用户名、密码
连接成功

如果正在挂起,请检查安全组是否允许来自EC2实例的传入连接


您看到了什么错误?能否确认可以从EC2连接到RDS主机(请尝试telnet$YOURHOST 5432)。无法连接到服务器:无法创建SSH隧道。错误:无法建立到SSH网关的会话^^请稍候,我还要将此添加到问题
无法建立到SSH网关的会话
表示您到EC2实例的连接不工作。你能用SSH从本地机器连接到那个主机吗?仔细检查您在
SSH Tunnel
对话框中输入的凭据是否匹配。据我所知,主机名也应该可以。我记得上次我尝试使用pgAdmin4使用SSH tunnelling时,如果标识文件没有密码保护,它将无法工作。这正是我所需要的,因为我还使用了公司代理来进行SSH