如何将 DataGrip 连接到 Google 计算引擎上的 Postgres

如何将 DataGrip 连接到 Google 计算引擎上的 Postgres

我在 Google Compute 引擎上安装了 Postgres。我可以创建用户、模式和表。我可以使用 PyCharm 远程配置连接到 Google Compute 引擎。但我无法将 DataGrip 连接到 Postgres。

看起来 Posgres 端口是开放的(端口 5432):

...@instance-2:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:5432                :::*                    LISTEN      -        

看起来连接被阻止了。当尝试 telnet 时

telnet <GCP Compute engine IP> 5432 

没有成功

尝试在 DataGrip 中使用“SSH 隧道”。虽然 SSH 隧道连接良好,但我仍然无法连接到 Postgres

有人能建议如何确保 Google Cloud 设置不会阻止连接,或者建议如何正确设置连接吗?谢谢

有人建议编辑“pg_hba.conf”。据我所知,我需要添加
我的具体 IP。每次我更改工作地点时,我是否都需要更改它?
还有其他建议吗?

答案1

pg_hba.conf您的 PostgreSQL 数据库访问由您提到的和文件控制postgresql.conf

您能够通过 SSH 进入您的虚拟机,因为它监听端口 22 并接受来自每个 IP 的连接:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

目前看来您有一个默认配置,只允许来自本地主机(127.0.0.1)的连接。

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN

为了让服务器接受来自每个 IP 的到您的数据库的连接,请找到一个postgresql.conf文件并将一行从 更改listen_addresses = 'localhost'listen_addresses = '*'

现在重新启动服务sudo service postgresql reload并检查你的服务器是否接受来自所有 IP 的连接:

$ netstat -nlt
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN

我们看到端口 5432 对任何 IP 开放。

接下来编辑您的pg_hba.conf文件并在末尾添加以下内容:

host    all             all              0.0.0.0/0                       md5
host    all             all              ::/0                            md5

现在重新启动 postgresql 服务器(以确保更改被考虑在内)并尝试连接;

$ psql -h your-postgres-server-ip -U user
Password for user user:
psql (9.4.1, server 9.4.5)
Type "help" for help.

postgres=# \l

但是,由于将您的数据库暴露给互联网并允许来自任何 IP 的连接,因此这会带来一些安全风险。因此 - 如果您知道要连接的 IP(或范围),则可以将它们放入“pg_hba.conf”中。

您也可以查看描述pg_hba.conf结构这里和如何配置 PostgreSQL 的传入连接

和 -如果你非常偏执,那么你可以在pg_hba.conf每次更改位置/IP 时更改 IP连接到它。

相关内容