PostgreSQL 13 如何配置 postgresql.conf 开启远程连接

文章导读
PostgreSQL 13 开启远程连接需修改 postgresql.conf 中的 listen_addresses 参数为 '*' 或特定 IP,并同时配置 pg_hba.conf 允许远程主机认证。生产环境直接监听所有接口存在安全风险,建议结合防火墙和白名单限制。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

PostgreSQL 13 开启远程连接需修改 postgresql.conf 中的 listen_addresses 参数为 '*' 或特定 IP,并同时配置 pg_hba.conf 允许远程主机认证。生产环境直接监听所有接口存在安全风险,建议结合防火墙和白名单限制。

先说结论:仅修改 postgresql.conf 不足以开启远程连接,必须同步调整 pg_hba.conf 认证规则并重启服务。

  • 适合:开发测试环境或已配置安全组的生产数据库
  • 先准备:确认配置文件路径、具备 sudo 权限、备份原配置
  • 验收:验证端口监听状态、远程客户端成功登录

命令速用版

以下命令适用于 Debian/Ubuntu 系默认路径,CentOS/RHEL 路径见分步处理章节。

sudo nano /etc/postgresql/13/main/postgresql.conf
# 修改行为:listen_addresses = '*'
sudo nano /etc/postgresql/13/main/pg_hba.conf
# 新增行:host all all 0.0.0.0/0 md5
sudo systemctl restart postgresql

为什么会这样

PostgreSQL 默认配置仅监听 localhost 是为了防止未经授权的 network 访问。

数据库安装后默认 listen_addresses 值为 'localhost',且 pg_hba.conf 通常只信任本地连接。这种“宅”属性是安全默认值,避免数据库暴露在公网。开启远程连接本质是修改监听网卡范围并定义哪些 IP 可以通过密码认证。

分步处理

按顺序执行以下步骤,每步完成后检查确认点。

1. 定位配置文件路径
不同操作系统路径不同,使用 find 命令确认:
sudo find / -name 'postgresql.conf' 2>/dev/null
常见路径:Debian/Ubuntu 为 /etc/postgresql/13/main/,CentOS/RHEL 为 /var/lib/pgsql/13/data/。

2. 修改监听地址
编辑 postgresql.conf,找到 listen_addresses 参数。
操作:将 #listen_addresses = 'localhost' 改为 listen_addresses = '*'。
风险边界:'*' 表示监听所有网卡,生产环境建议指定内网 IP。

3. 配置客户端认证
编辑同目录下的 pg_hba.conf 文件。
操作:在文件末尾添加 host all all 0.0.0.0/0 md5。
风险边界:避免使用 trust 方法,否则无需密码即可连接;md5 或 scram-sha-256 更安全。

4. 重启数据库服务
配置修改后必须重启生效。
命令:sudo systemctl restart postgresql 或 sudo systemctl restart postgresql-13。
检查点:服务状态 active (running)。

5. 开放防火墙端口
如果系统启用防火墙,需放行 5432 端口。
命令:sudo ufw allow 5432/tcp 或 sudo firewall-cmd `--add-port`=5432/tcp `--permanent`。

PostgreSQL 13 如何配置 postgresql.conf 开启远程连接

怎么验证是否生效

通过端口监听状态和远程客户端连接两方面验证。

1. 检查端口监听
执行命令:ss -lnt | grep 5432
生效标志:看到 0.0.0.0:5432 或 :::5432,而非 127.0.0.1:5432。

2. 远程连接测试
在另一台机器执行:psql -U postgres -h 服务器 IP -p 5432
生效标志:提示输入密码且登录成功,无 FATAL: no pg_hba.conf entry 错误。

常见坑

配置过程中容易忽略的细节导致连接失败。

  • 认证方法错误:pg_hba.conf 中使用了 trust 导致安全风险,或使用了 md5 但用户密码未设置。
  • 防火墙拦截:数据库服务已重启但云服务商安全组未放行 5432 端口。
  • 配置文件未重载:修改后仅 reload 而非 restart,部分监听参数需重启生效。
  • 路径混淆:CentOS 和 Ubuntu 配置文件路径不同,修改了错误目录下的文件。

常见问题

修改配置后服务启动失败怎么办?

检查配置文件语法错误。

查看日志 /var/log/postgresql/postgresql-13-main.log 或使用 journalctl -u postgresql 定位错误行,通常是拼写错误或缩进问题。

远程连接提示密码认证失败?

确认数据库用户已设置密码。

使用 psql -U postgres 登录后执行 \password 设置密码,确保 pg_hba.conf 认证方法与密码状态匹配。

监听地址修改后仍只监听 localhost?

确认修改的是正确的 postgresql.conf 文件。

使用 SHOW config_file; 命令查看当前服务加载的配置文件路径,确保编辑路径一致。

参考来源

  • PostgreSQL 13/14 远程连接配置全攻略:从 listen_addresses 到 pg_hba.conf
  • PostgreSQL 开启远程连接配置教程
  • PostgreSQL 配置远程连接简单图文教程例子解析
  • 如何配置 PostgreSQL 允许远程连接 - 以 Odoo 数据库为例
  • CentOS 7 安装 PostgreSQL 13 完整实践教程
  • PostgreSQL 13 配置允许远程连接