【问题标题】:postgresql server doesn't listenpostgresql 服务器不听
【发布时间】:2012-09-05 17:38:08
【问题描述】:

我最近刚刚通过 SSH 在我们的服务器上安装了 PostgreSQL。安装成功,直到我尝试在我的 Windows 机器上使用 pgAdmin 连接到它。我收到了这种错误:

无法连接到服务器:连接被拒绝 (0x0000274D/10061) 是 在主机“xxx.xxx.xxx.xxx”上运行并接受 TCP/IP 的服务器 端口 5432 上的连接?

xxx.xxx.xxx.xxx = 我的服务器的公共 IP。

文档建议可以通过在 /etc/postgresql/9.1/main/postgresql.conf 中设置 listen_addresses = '*' 的值来解决此问题。我这样做了,但它仍然不允许我这样做。

出现其他错误

致命:主机“xxx.xx.xxx.xxx”没有 pg_hba.conf 条目,用户 “postgres”,数据库“postgres”,致命的 SSL:没有 pg_hba.conf 条目 对于主机“xxx.xx.xxx.xxx”,用户“postgres”,数据库“postgres”,SSL 关闭

xxx.xx.xxx.xxx = 我的 IP 地址。

我似乎错过了什么?

【问题讨论】:

    标签: postgresql ubuntu ssh postgresql-9.1 ubuntu-12.04


    【解决方案1】:

    可能会阻止 postgres 连接的事情:

    1. postgresql.conf 中配置错误的listen_address
    2. selinux (?)
    3. iptables
    4. pg_hba.conf(虽然这应该会导致不同的错误,而不是服务器不监听)

    如果你 ssh 进入并运行psql,你能在本地连接到服务器吗?

    在我们的内部开发服务器上,我只是关闭了 selinux 和 iptables。从安全角度来看,这是一个坏主意,但它可以作为一个临时步骤来帮助您缩小问题所在。

    【讨论】:

    • 通过 SSH 远程,我可以在 postgres 用户下做到psql。如果我使用安装在我的 Windows 机器上的 pgAdmin,我不仅不能访问它。
    • 我现在可以通过 pgAdmin 连接到 postgres,但是我硬编码了我的 IP 地址host all all 122.55.37.1XX/32 md5。我怎样才能使它像一个适合该 IP 地址类别的通配符?
    • @LeandroGarcia:对于 IP 地址,您需要考虑“位掩码”,而不是“通配符”。这取决于您要接受多少个 IP 地址的连接,以及最后两位数字是什么。例如,122.55.37.100/29 将覆盖 122.55.37.97 到 122.55.37.102 的范围; 122.55.37.130/29 将覆盖 122.55.37.129 到 122.55.37.134; 122.55.37.166/27 将覆盖 122.55.37.161 到 122.55.37.190。 (我认为。谷歌“在线子网计算器”,或类似的东西寻求位掩码的帮助。)
    【解决方案2】:

    您可能需要更改多个配置文件。在您的情况下,您可能还需要编辑 pg_hba.conf。在该文件中搜索“非本地连接”。

    我喜欢将配置文件置于版本控制之下。这样更容易从错误中恢复。

    您可能需要在进行这些更改后重新启动 PostgreSQL 服务器。

    【讨论】:

    • 但所有这些都属于本地,local all postgres peerlocal all all peerhost all all 127.0.0.1/32 md5host all all ::1/128 md5
    • @Leandro Garcia:如果当前只允许本地 unix 套接字和 127.0.0.1 或 ::1/128(即 localhost),那可能就是问题所在。您需要在客户端机器使用的子网中添加一行。即 192.168.0.0/16 等
    • 我很困惑,我的 IPv4 是 192.168.0.100,那么默认网关是 192.168.0.1。如何添加?
    • @Leandro Garcia:查找 CIDR 表示法以获取详细信息。您只需添加 192.168.0.100/32 即可仅添加您当前的 IP 地址。如果该地址发生变化,您可能希望 192.168.0.0/24 允许 192.168.0.x 中的任何人连接到您的数据库服务器。
    • 所以如果我要添加这个,我最终会得到这样的结果:local all all 192.168.0.0/24 md5。但这不起作用,一个错误指出“无效的身份验证方法 192.168.0.0/24”跨度>
    【解决方案3】:
    • 更改服务器上的 listen_addresses 设置后,确保重新启动 PostgreSQL 服务器(使用 kill -HUP 等向 postmaster 进程发送 SIGHUP)。
    • 确保 postgresql.conf 端口设置为 5432
    • 确保如果服务器上正在运行防火墙,则该端口 5432 对来自您正在使用的窗口(客户端)计算机的连接打开
    • 检查 pg_hba.conf 以确保您的客户端计算机的子网被授予访问权限
    • 尝试在本地使用 psql

    【讨论】:

    • @Catcall @Joshua Berry - 我设法做到了,但是我硬编码了我的 IP 地址:host all all 122.55.37.1XX/32 md5 我怎样才能让它像一个适合该 IP 地址类别的通配符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2014-01-03
    • 2015-05-26
    • 2013-07-29
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多