使用 pgAdmin 访问远程 Postgres 服务器

Posted

技术标签:

【中文标题】使用 pgAdmin 访问远程 Postgres 服务器【英文标题】:Access remote Postgres server with pgAdmin 【发布时间】:2011-09-02 16:09:23 【问题描述】:

我在我的 XP 机器上运行了 pgAdmin。网络上有一台运行 Postgres 服务器的 Centos 机器。 Postgres 服务器pg_hba.conf 文件有以下几行

TYPE      DATABASE    USER      CIDR-ADDRESS       METHOD
host      all         all       10.0.0.68/32       trust
local     mydb        myuser                       password
local     all         postgres                     ident
host      mydb        myuser    10.0.0.68/32       password
host      all         postgres  10.0.0.68/32       trust

我的postgresql.conf 文件有以下行:

listen_address = 'localhost, 10.0.20.10'

nmap -sS 10.0.20.10 显示:

PORT      STATE     SERVICE
5432/tcp  open      postgresql

我可以 ssh 进入服务器上的 bash shell,但我无法连接到 pgAdmin。我得到以下信息:

无法连接到服务器:没有到主机的路由(0x00002751/10065)是 在主机“10.0.20.10”上运行并接受 TCP/IP 连接的服务器 在 5432 端口上?

我不知道问题出在哪里。

【问题讨论】:

确保 Postgres 服务器已重新启动(例如,listen_address 更改需要重新启动)。我想这可能是一些防火墙问题。 尝试使用 ssh 访问端口 5432,在 pgadmin3 中的数字 ip-adres(而不是主机名)上尝试(可能是过时的 DNS 条目)是否涉及任何 NAT/防火墙? 是的,这是防火墙问题。 'service iptables stop' 启用了连接。我会写一个规则来允许连接。感谢您的意见。 【参考方案1】:

@Aidan 自己找到了解决方案:

这是防火墙问题。

service iptables stop

启用连接。我就写一条规则来允许连接。

【讨论】:

你可以很容易地添加一个 iptable 规则来转发到正确的端口,而不是关闭你的防火墙。【参考方案2】:

假设服务器的IP地址是10.0.20.10,那么你可以像@Dark Star1在cmets中建议的那样添加这些iptable规则:

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

【讨论】:

以上是关于使用 pgAdmin 访问远程 Postgres 服务器的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 8.2使用pgAdmin安装PostgreSQL

docker postgres pgadmin 本地连​​接

Postgres 中的 pg_class 是啥以及如何使用 pgAdmin 4 查看它?

如何在 Ubuntu 上使用 pgAdmin 将 Postgres 连接到 localhost 服务器?

我应该如何使用 pgAdmin 3 将数据从 CSV 导入 Postgres 表?

在 docker 的 pgadmin 中添加新的 postgres 服务器