当我连接到远程服务器上的 psql 时
>psql -h {hostname}
psql: could not connect to server: Connection timed out (0x0000274C/10060). Is the server running on host "{hostname}" (194.58.98.133) and accepting TCP/IP connections on port 5432?
在服务器上:
netstat -nlp | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 29609/postmaster
tcp 0 0 :::5432 :::* LISTEN 29609/postmaster
unix 2 [ ACC ] STREAM LISTENING 2107633273 29609/postmaster /tmp/.s.PGSQL.5432
服务器上没有 iptables。Ping 服务器成功。
我做错了什么?
答案1
pg_hba.conf
当我的或 AWS 安全组配置不正确时,我遇到了这种错误。有很多关于如何解决这个问题的文档。例如,你可以查看下面的内容,引用自关联
错误:psql:无法连接到服务器:连接被拒绝服务器是否在主机“192.168.0.1”上运行并在端口 5432 上接受 TCP/IP 连接?
常见的原因:postmaster 或 PostgreSQL 的服务器守护进程未运行或者配置不正确。
大多数情况下,当您收到此错误时,是因为未将 PostgreSQL 配置为允许 TCP/IP 连接,或者至少不允许来自特定工作站的连接。如果您已验证确实
postmaster
在您尝试连接的主机上运行,那么以下是导致此问题的常见原因列表:
postgresql.conf
未设置为允许 TCP/IP 连接。您需要查看listen_address
配置参数。postgresql.conf
未设置为允许在非标准端口号上进行连接。要确定这一点,请查看port
配置选项。- PostgreSQL 访问配置文件 (
pg_hba.conf
) 中的身份验证规则未设置为允许您的用户或 IP 地址连接到该数据库。请参阅官方文档了解有关正确设置的更多信息pg_hba.conf
。- 确保没有防火墙,例如
iptables
阻止本地系统与远程主机建立连接的防火墙
答案2
你应该看看PostgreSQL 配置文件。要允许来自任何地方的连接,您必须设置listen_aaddresses(监听地址)到 *:
listen_addresses = '*'
这配置文件应该有一个这样的条目,以允许来自您的网络的连接:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 192.168.190.0/24 md5
答案3
就我而言,由于我有一个 AWS RDS 托管实例,所以问题出在安全组规则上。
添加入站规则以允许来自我的 PC 的流量允许连接。有关更多详细信息,请参阅:https://stackoverflow.com/a/70337387/4725074
答案4
你检查过防火墙设置吗?尝试允许 5432 端口连接。例如 Ubuntu ufw:sudo ufw allow 5432