ChatGPT解决这个技术问题 Extra ChatGPT

PostgreSQL:使用 psql 命令远程连接到 Postgres 实例

我想远程连接到 Postgres 实例。我知道我们可以使用传递主机名的 psql 命令来做到这一点

我尝试了以下方法:

psql -U postgres -p 5432 -h hostname

我修改了目标机器上的/etc/postgresql/9.3/main/pg_hba.conf文件,默认允许远程连接

我将以下行添加到文件中

host all all source_ip/32 trust

我使用重新启动了集群

pg_ctlcluster 9.2 mycluster stop
pg_ctlcluster 9.2 mycluster start

但是,当我尝试从 source_ip 连接时,我仍然收到错误

服务器是否在主机 "" 上运行并接受端口 5432 上的 TCP/IP 连接?

我在这里做错了什么?

postgres 服务器在什么操作系统上运行?
检查您的防火墙设置,因此端口 5432 已打开以接受连接
假设您的客户端机器具有 ssh,您还可以通过设置 ssh 隧道:ssh -L 5432:localhost:5432 your_server_ip 并以与连接到 localhost db 相同的方式连接来尝试与远程 postgres 的类似 localhost 的连接。这可以帮助调试。
默认情况下,postgresql 只在 localhost 上侦听(并且许多发行版保持此默认值不变)将 listen_addresses 的值调整为 '*' 以使 postgresql 侦听您机器上的所有地址。

v
vinzee

我使用以下选项解决了这个问题:

将您的数据库主机从您的网络团队列入白名单,以确保您可以访问远程主机 安装 postgreSQL 版本 4 或更高版本 运行以下命令: psql -h -p -U


我使用 ElephantSql 并且以下工作:psql -h <surus.db.elephantsql.com> -U <user>。主机可以在免费版本中更改,然后我必须添加密码,该密码与 URL 字符串中的用户用冒号分隔。
W
William Miller
psql -h <IP_Address> -p <port_no> -d <database_name> -U <DB_username> -W

-W 选项将提示输入密码。例如:

psql -h 192.168.1.50 -p 5432 -d testdb -U testuser -W

t
taras

我想到了。

必须在 postgresql.conf 中设置 listen_addresses='*' 以允许来自任何 ip / all ip 的传入连接


这是安全问题还是被认为是正常做法?
@Ben 一般来说,应该只允许特定的 IP 地址连接到 psql 实例。
D
Draeger

下面是明智的

打开端口 - 确保 PSQL 端口根据您的要求对所有远程连接或来自特定 IP 集的连接开放。 PSQL 一般运行在 5432 端口,并且是可配置的,因此相应地暴露相关端口。更新远程服务器 PSQL 配置 - 在 postgresql.conf 文件中设置 listen_addresses = '*',一般路径是 /etc/postgresql/psql_version/main/postgresql.conf 远程连接 - psql -U -h - in如果 psql 正在远程服务器上的 5432 以外的端口上运行,则通过添加 -p 来指定端口

下面的小优点 - 如果 IP 已映射到域名,您可以通过将 <IP_address> 替换为 <host_name> 来连接。为此,在 pg_hba.conf 文件中添加新的连接规则

注意 - 以上所有解释都可能导致安全问题 - 最佳实践始终是关闭 psql 端口,或者只允许 IP 列表通过端口连接。


R
Richard T

请注意,pg_hba.conf 中的“ident”需要在客户端上运行“ident server”。