You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:通过SSH连接亚马逊Linux服务器PostgreSQL时认证失败

解决PostgreSQL远程连接密码认证失败问题

看起来你遇到的核心问题是远程连接时PostgreSQL的认证规则不匹配,而SSH隧道能正常工作是因为它绕过了远程认证的限制——我们一步步来解决:

1. 理解为什么SSH隧道能正常工作

当你用IntelliJ通过SSH操作远程数据库时,SSH会把本地的请求转发到服务器的127.0.0.1:5432,此时PostgreSQL看到的连接来源是127.0.0.1,正好匹配你pg_hba.conf里的这条规则:

host all all 127.0.0.1/32 trust

trust规则会直接允许连接,不需要密码验证,所以能成功。但直接用IntelliJ/PgAdmin远程连接时,PostgreSQL看到的是你的本地公网IP,找不到对应的认证规则,就会触发密码认证失败。

2. 修改pg_hba.conf添加远程认证规则

登录到你的亚马逊Linux服务器,找到pg_hba.conf文件(通常在/var/lib/pgsql/<版本号>/data/或者/etc/postgresql/<版本号>/main/目录下),添加一条针对你本地IP的密码认证规则:

针对特定IP(推荐,更安全)

如果知道自己的本地公网IP,添加:

host    all             all             你的本地公网IP/32        scram-sha-256

注:如果你的PostgreSQL版本低于10,用md5代替scram-sha-256

临时测试(不推荐生产环境)

如果不确定IP或者需要快速测试,可以暂时允许所有IP(生产环境一定要改掉):

host    all             all             0.0.0.0/0                scram-sha-256

添加后保存文件,必须重启PostgreSQL服务让配置生效:

# 亚马逊Linux常用命令
sudo systemctl restart postgresql
# 旧版本可能用
sudo service postgresql restart

3. 确保postgres用户的密码正确且加密

有时候即使密码输入正确,也可能因为密码没有加密存储导致认证失败。登录到服务器的PostgreSQL命令行:

sudo -u postgres psql

然后执行命令重置密码(确保用加密方式):

ALTER USER postgres WITH ENCRYPTED PASSWORD '你的强密码';
\q

4. 检查服务器防火墙和安全组

亚马逊Linux上要确保5432端口对外开放:

  • 检查本地防火墙(比如firewalld):
    sudo firewall-cmd --add-port=5432/tcp --permanent
    sudo firewall-cmd --reload
    
  • 检查AWS安全组:在EC2控制台的安全组配置里,添加一条入站规则,允许5432端口,来源设置为你的本地IP或者刚才在pg_hba.conf里配置的IP段。

最后验证

修改完成后,再用IntelliJ或PgAdmin尝试远程连接,应该就能正常通过密码认证了。

内容的提问来源于stack exchange,提问作者artemk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:33:43