【问题标题】:Connect to remote postgresql server on amazon ec2连接到亚马逊 ec2 上的远程 postgresql 服务器
【发布时间】:2013-01-27 07:15:33
【问题描述】:

我启动了一个 amazon ec2 实例,并在其上安装了 postgresql 9.1。然后我去了 安全组:quicklaunch-1(there was one moredefault`,我没改)并打开5432 TCP端口,表格如下:

(Service)   Source  Action
22        0.0.0.0/0         Delete
5432      0.0.0.0/32    Delete
5433      0.0.0.0/32    Delete
6432      0.0.0.0/32    Delete

我已经创建了一个数据库和用户。 我的/etc/postgresql/9.1/main/pg_hba.conf 看起来像这样:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               md5
host    db_name         user_name       0.0.0.0/0               md5

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
host    replication     postgres        127.0.0.1/32            md5
host    replication     postgres        ::1/128                 md5

/etc/postgresql/9.1/main/postgresql.conf 看起来像这样:

# - Connection Settings -
listen_addresses = '*'
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
                                        # (change requires restart)
port = 5432                             # (change requires restart)

然后我尝试按如下方式连接到远程计算机:

psql -h ec2-xxx-xx-xxx-xxx.compute-1.amazonaws.com -d <database_name> -U <username>

其中 ec2-xxx-xx-xxx-xxx.compute-1.amazonaws.com 是我的公共 DNS

上面的命令没有任何连接,我该如何连接?

【问题讨论】:

    标签: postgresql amazon-web-services amazon-ec2 postgresql-9.1


    【解决方案1】:

    在此表中:

    5432      0.0.0.0/32    Delete
    5433      0.0.0.0/32    Delete
    6432      0.0.0.0/32    Delete 
    

    CIDR 看起来您不允许任何 IP 进入。它们不应该是 0.0.0.0/0,就像您拥有的端口 22 (ssh) 一样吗?

    【讨论】:

    • 32端口和0端口有什么区别。
    • @whatf: 32 不是端口号,它是CIDR notation 中的前缀大小。 0.0.0.0/0 表示允许来自任何地址的连接。 5432 是端口号。
    • 天哪!整个两天的周末,我一直在寻找这个答案!谢谢!!!
    【解决方案2】:

    我找到了解决这个问题的方法。 需要两件事。

    1. 使用文本编辑器修改 pg_hba.conf。 找到所有 127.0.0.1/0 md5 的行主机。 在它下面,添加这个新行:host all all 0.0.0.0/0 md5

    2. 编辑 PostgreSQL postgresql.conf 文件:

      使用文本编辑器修改 postgresql.conf。 找到以#listen_addresses = 'localhost' 开头的行。 通过删除 # 取消注释该行,并将 localhost 更改为 *。 该行现在应该如下所示:listen_addresses = '*' # what IP address(es) to listen;.

    现在只需重新启动您的 postgres 服务,它就会连接

    【讨论】:

    • 如果您使用此选项,您可能需要启用 SSL/TLS。
    • 如果你想允许所有地址访问你的数据库,不要在 Postgres9.5 上使用listen_addresses = '',使用listen_addresses = '*'(注意星号)
    【解决方案3】:

    您的 psql 命令需要添加一个 -W 选项,它允许您输入 db 用户的密码和一个 -p 选项,后跟 postgres 端口号(默认为 5432)

    干杯!

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2014-06-07
      • 2014-11-27
      • 2011-07-25
      相关资源
      最近更新 更多