设置 Postgres:无法远程连接到 Postgres 服务器

设置 Postgres:无法远程连接到 Postgres 服务器

我在让 postgres 接受来自其他服务器的连接时遇到了问题。这是我的设置:

  • APP06(10.55.129.31):运行 Postgres 的服务器
  • APP05(10.55.129.30):服务器尝试连接 Postgres

这是我的/var/lib/pgsql/data/pg_hba.conf文件app06

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         10.55.129.30/32       trust
host    all         all         10.55.129.31/32       trust
host    all         all         0.0.0.0/0             trust
# IPv6 local connections:
host    all         all         ::1/128               trust

这并非我想要的(我想使用 LDAP),但至少应该可以工作。我想将 10.55.129.30 连接到 10.44.129.31。第一host行应该就是我所需要的。第三host行应该允许从任何地方进行连接。

现在,我们启动 Postgresapp06

 $ /etc/init.d/postgres start
 $ /etc/init.d/postgres status

 pg_ctl: server is running (PID: 30091)
 /usr/bin/postgres "-D" "/var/lib/pgsql/data"

看起来不错...

我们来看看Netstat:

$ netstat -nlp | grep 5432
tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      30091/postmaster    
unix  2      [ ACC ]     STREAM     LISTENING     16490154 30091/postmaster    /tmp/.s.PGSQL.5432

好的...我想...由于我不是真正的系统管理员,我无法确切地说出这是什么意思,但看起来 PID 30091(进程 postmaster)打开了端口 5432。

让我们看看是否有任何东西在监听端口 5432

$ telnet localhost 5432
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

好的,端口 5432 已开放并接受连接。

现在,我们将前往 APP05 并查看是否可以连接...

我已经尝试过psql逃避app05没有成功。我可以和app06

$ ping app06

PING app06 (10.55.129.31) 56(84) bytes of data.
64 bytes from app06 (10.55.129.31): icmp_seq=1 ttl=64 time=0.901 ms
64 bytes from app06 (10.55.129.31): icmp_seq=2 ttl=64 time=0.230 ms

--- app06 ping statistics ---
2 packets transmitted, 6 received, 0% packet loss, time 5001ms

好的,我可以从 app05 与 app06 通信。让我们看看我是否可以连接到 Postgres 的端口:

$ telnet app06 5432
Trying 10.55.129.31...
telnet: connect to address 10.55.129.31: Connection refused
telnet: Unable to connect to remote host: Connection refused

我无法连接到端口 5432

我运行/usr/sbin/lokkit并验证了软件防火墙已被关闭。

我绝不是网络或系统管理员。我也不是 Postgres 管理员。我很可能错过了一些简单而愚蠢的事情,但我不知道是什么。

我非常确定这些机器上的端口 5432 在网络上是开放的。我尝试将 Postgres 端口切换到 8999,我确定它没有被阻止,但我遇到了同样的问题。

知道我做错了什么吗?

答案1

在文本编辑器中打开 postgresql.conf 并查找listen_addresses关键字。将其设置为*

重新启动 pgsql。

答案2

仅供参考...一个极其愚蠢我却忘记删除前导“#当我去更改配置文件中的“listen_addresses”行时。(是的......因此,该行[仍然]是评论! 嗯嗯。)

答案3

答案很简单,你的 postgress 安装仅绑定到 127.0.0.1 接口

tcp        0      0 127.0.0.1:5432              0.0.0.0:*                   LISTEN      30091/postmaster    

您需要重新配置它并将其绑定到您的网络接口/ IP 地址,然后您就可以访问

答案4

只是让遇到同样问题的人知道:

  1. 我确信 postgres 在本地运行得很好。
  2. 我可以在我本地访问和操作postgres。(192.168.10.14)
  3. 我确信所有配置项都是正确的(监听'*',并允许0.0.0.0/0访问)
  4. 我可以从另一台电脑 (192.168.10.20) 远程访问 postgres,但是无法连接 postgres。
   telnet 192.168.10.14 5432   # ->  OK
   ping 192.168.10.14          # ->  OK
   psql -h 192.168.10.14       # ->  failed.  remote server closed ...
  1. 最后我得到了答案:我错误地设置了我的网络。网络掩码应该是255.255.255.0,但不是0.0.0.0
# correct mask: 
255.255.255.0

# incorrect mask
0.0.0.0 
  1. 所以我修正了我的网络的网络掩码,重新启动,一切顺利!

相关内容