PostgreSQL 服务器远程连接

4

我正试图在Ubuntu上设置一个远程访问数据的PostgreSQL 9.1服务器。我已经正确安装了PostgreSQL,服务器进程正在运行,并且我正在尝试配置它,以便我可以从我的局域网外的几台计算机上通过互联网远程访问该服务器。

我已经修改了我的pg_hba.conf文件:

host    all     all     0.0.0.0     trust

并使用以下postgresql.conf:

listen_addresses = '*'
port = 5432

我额外修改了我的iptables以接受5432端口的连接。

当我尝试使用Python中的psycopg2进行连接时:

conn=psycopg2.connect('host=XX.XX.XX.XX port=5432 dbname=postgres user=myUser password=mypassword')

我收到了以下错误信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
connection_factory=connection_factory, async=async) 
psycopg2.OperationalError: could not connect to server: Connection refused
Is the server running on host "XX.XX.XX.XX" and accepting
TCP/IP connections on port 5432?

我不确定是否插入了正确的IP地址,我想知道如何确切地找出在这里连接到我的服务器需要使用什么IP地址。我使用运行postgres服务器的计算机的公共IP,但我不确定是否正确。或者还有其他步骤我还错过了吗?我知道这是不好的安全风格,但我暂时只想建立一个连接。此外,我的计算机位于路由器后面,那么我如何访问我的服务器?任何帮助将不胜感激。

你的服务器和你在同一个局域网吗?还是不同的局域网?你如何使用SSH访问服务器? - PearsonArtPhoto
1个回答

7
你的 pg_hba.conf 不应该使用 trust !!! trust 意味着不需要密码,我认为这不是你想要的。
这是正确的配置。
host    all             all             0.0.0.0/0               md5

请注意 0.0.0.0 后面的 /0
完整的 pg_hba.conf 应该是这样的:
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             0.0.0.0/0               md5

请注意,信任仅适用于本地连接。即对于在运行PostgreSQL服务器的机器上的localhost IP 127.0.0.1上运行的应用程序。

是的,我知道这是不好的做法,但目前我只是想建立一个连接,然后在此之后改善安全性。我已经在文件中包含了所有这些内容,只是为了简洁起见省略了它们。我的服务器在路由器后面,所以我需要知道如何从远程连接直接访问该机器。 - froot93
4
要连接路由器后的postgresql数据库,首先需要在路由器上配置端口转发。请搜索您路由器型号的“端口转发”教程。 - Ihor Romanchenko
1
还要检查远程计算机的防火墙是否阻止默认端口5432。 - Gopinagh.R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接