我在 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连接到它。