【问题标题】:Cannot connect to PostgreSQL Remotely on Amazon EC2 instance using PgAdmin无法使用 PgAdmin 在 Amazon EC2 实例上远程连接到 PostgreSQL
【发布时间】:2013-07-20 04:04:46
【问题描述】:

我有一个微型免费层 RHEL 6 实例正在运行,并使用此处的 yum 指令安装了 postgresql 9.2: http://yum.pgrpms.org/howtoyum.php

我可以在服务器上使用它本地连接到 PG 服务器:

03:46:20 root@xxx[~]$ psql -hlocalhost -p5432 -Upostgres

但是我从来没有在盒子外面成功地连接到它。错误消息如下所示:

12:11:56 saladinxu@GoodOldMBP[~]$ psql -h ec2-xxx.ap-southeast-1.compute.amazonaws.com -p5432 -Upostgres
    psql: could not connect to server: Connection refused
    Is the server running on host "ec2-54-251-188-3.ap-southeast-1.compute.amazonaws.com" (54.251.188.3) and accepting TCP/IP connections on port 5432?

我尝试了很多不同的方法。这是我的配置文件现在的样子:

/var/lib/pgsql/9.2/data/postgresql.conf:

...

# - Connection Settings -

listen_addresses = '*'      # what IP address(es) to listen on;
                # comma-separated list of addresses;
                # defaults to 'localhost'; use '*' for all
port = 5432             # (change requires restart)
max_connections = 100           # (change requires restart)
...

/var/lib/pgsql/9.2/data/pg_hba.conf:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             pgadmin         0.0.0.0/24              trust
host    all             all             [my ip]/24         md5
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

我已尝试将上述地址设为 0.0.0.0/0 但 id 无效。

每次我进行更改时,我都会通过运行它重新启动

service postgresql-9.2 restart

在这个 EC2 实例的安全组中,我已经可以看到这条规则:

TCP
Port (Service)  Source  Action
22 (SSH)    0.0.0.0/0   Delete
80 (HTTP)   0.0.0.0/0   Delete
5432    0.0.0.0/0   Delete

netstat命令显示端口已经打开:

04:07:46 root@ip-172-31-26-139[~]$ netstat -na|grep 5432
tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN      
tcp        0      0 :::5432                     :::*                        LISTEN      
unix  2      [ ACC ]     STREAM     LISTENING     14365  /tmp/.s.PGSQL.5432

回答bma的问题:

如果我在本地服务器上运行 nmap 命令,它似乎暗示通过内部 DNS 它将转到另一个 5432 已打开的主机:

10:16:05 root@ip-172-31-26-139[~]$ nmap -Pnv -p 5432 ec2-54-251-188-3.ap-southeast-1.compute.amazonaws.com

Starting Nmap 5.51 ( http://nmap.org ) at 2013-07-22 10:16 EDT
Nmap scan report for ec2-54-251-188-3.ap-southeast-1.compute.amazonaws.com (172.31.26.139)
Host is up (0.00012s latency).
rDNS record for 172.31.26.139: ip-172-31-26-139.ap-southeast-1.compute.internal
PORT     STATE SERVICE
5432/tcp open  postgresql

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

iptables 命令给出以下输出

10:16:14 root@ip-172-31-26-139[~]$ iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
25776   14M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
45  1801 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
251 15008 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
35  2016 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 21695 packets, 5138K bytes)
pkts bytes target     prot opt in     out     source               destination  

[根据bma的建议添加后编辑]

新增后iptables是这样的:

11:57:20 root@ip-172-31-26-139[~]$ iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
26516   14M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
47  1885 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
255 15236 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
38  2208 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
0     0 ACCEPT     tcp  --  *      *       [my ip]         54.251.188.3        tcp spts:1024:65535 dpt:5432 state NEW,ESTABLISHED 
0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            54.251.188.3        tcp spt:5432 dpts:1024:65535 state ESTABLISHED 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 5 packets, 1124 bytes)
pkts bytes target     prot opt in     out     source               destination         
0     0 ACCEPT     tcp  --  *      *       54.251.188.3         [my ip]        tcp spt:5432 dpts:1024:65535 state ESTABLISHED 
0     0 ACCEPT     tcp  --  *      *       54.251.188.3         0.0.0.0/0           tcp spts:1024:65535 dpt:5432 state NEW,ESTABLISHED 

但我仍然无法连接(同样的错误)。这里可能缺少什么?

【问题讨论】:

标签: postgresql amazon-ec2 pgadmin


【解决方案1】:

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

  1. 使用文本编辑器修改 pg_hba.conf。找到该行:

    host all all 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 on;.

现在只需重新启动您的 postgres 服务,它将能够连接

【讨论】:

  • 这对我帮助很大。我修好了
  • 我确实做了这两项更改并重新启动了我的服务,但仍然无法连接,有什么想法吗?谢谢!
  • 好吧,我想通了:stackoverflow.com/a/14548043/4117496
  • 这两步对我帮助很大!谢谢!
【解决方案2】:

看起来您的 pg_hba.conf 缺少组名后的“+”。试试

# TYPE DATABASE USER ADDRESS METHOD host all pgadmin+ 0.0.0.0/24 trust host all all [my ip]/24 md5

pg_hba.conf关于用户说明:

值 all 指定它匹配所有用户。否则,这要么是特定数据库用户的名称,要么是前面带 + 的组名。 (回想一下,在 PostgreSQL 中用户和组之间没有真正的区别;+ 标记实际上意味着“匹配任何直接或间接属于该角色的角色”,而没有 + 标记的名称仅匹配该特定角色。 )

【讨论】:

    【解决方案3】:

    您是否有阻止端口 5432 的防火墙?快速的 nmap 显示它正在被过滤。

    nmap -Pnv -p 5432 ec2-54-251-188-3.ap-southeast-1.compute.amazonaws.com
    
    Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-21 11:05 PDT
    Nmap scan report for ec2-54-251-188-3.ap-southeast-1.compute.amazonaws.com (54.251.188.3)
    Host is up (0.19s latency).
    PORT     STATE    SERVICE
    5432/tcp filtered postgresql
    

    您的 EC2 上的 iptables 显示端口 5432 是什么?

    iptables -nvL
    

    [在OP添加更多细节之后]

    Netstat 显示它正在侦听,但防火墙输出看起来不像 5432 端口是打开的(我承认不是网络专家)。参考我之前安装的一些笔记,您可能需要向您的 IP 开放 EC2 端口 5432。

    要允许输入防火墙访问,请将 YOUR-REMOTE-IP 替换为您要连接的 IP:

    iptables -A INPUT -p tcp -s YOUR-REMOTE-IP --sport 1024:65535 -d 54.251.188.3 --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -p tcp -s 54.251.188.3 --sport 5432 -d YOUR-REMOTE-IP --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
    

    --出站访问

    iptables -A OUTPUT -p tcp -s 54.251.188.3 --sport 1024:65535 -d 0/0 --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp -s 0/0 --sport 5432 -d 54.251.188.3 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
    

    之后iptables -nvL 列出了什么。可以连接吗?

    【讨论】:

    • 不幸的是还没有运气。知道缺少什么吗?
    • 您是否尝试直接连接到 IP 而不是 DNS 名称? psql -d postgres -U postgres -p 5432 -h 54.251.188.3
    • yes 仍然得到这个:psql: 无法连接到服务器:连接被拒绝服务器是否在主机“54.251.188.3”上运行并接受端口 5432 上的 TCP/IP 连接?
    • 我的输出是这个PORT STATE SERVICE 5432/tcp open postgresql,但我仍然面临这个Connection refused Is the server running on host "54.251.188.3" and accepting TCP/IP connections on port 5432,有什么线索吗?
    • 好吧,我想通了:stackoverflow.com/a/14548043/4117496
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多