通过 SSH 隧道在 PostgreSQL 上进行身份验证失败

Posted

技术标签:

【中文标题】通过 SSH 隧道在 PostgreSQL 上进行身份验证失败【英文标题】:Ident authentication failed on PostgreSQL through SSH tunnel 【发布时间】:2015-09-08 04:56:49 【问题描述】:

我有 PostgreSQL 服务器,另外一台计算机是它的客户端。他们在一个网络中。如果我使用 psql 命令,例如

psql --host db_ip_address --port 5432 --user user base_name

连接正常,一切正常。

但如果我要打开到数据库服务器的 SSH 隧道,例如:

ssh -L 63333:localhost:5432 root@db_ip_address

然后尝试做同样的事情:

psql --host localhost --port 63333 --user user base_name

比它突然输出错误信息:

psql: FATAL: Ident authentication failed for user "user"

服务器上的 pg_hba.conf 有以下几行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.49/32         trust
host    all             all             192.168.0.50/32         trust
host    all             all             192.168.0.48/32         trust
# IPv6 local connections:
host    all             all             ::1/128                 ident

我需要使用 SSH 隧道,因为我自己的计算机实际上还需要一个隧道,这是在其上获得 db 连接的唯一方法。 而且我不想更改任何配置或基于 PostgreSQL 服务器,因为它在实时服务器上工作。 希望得到帮助。

【问题讨论】:

【参考方案1】:

根据错误消息和pg_hba.conf,服务器将localhost 解析为其IPv6 地址,该地址与ident 身份验证相关联。

作为一种解决方案,您可以:

pg_hba.conf 更改为为::1/128 设置trust 方法,就像127.0.0.1/32 的情况一样

或运行psql --host 127.0.0.1 --port 63333 [other options]... 以强制使用 IPv4 地址。

【讨论】:

实际上,这看起来像是一个解决方案。我只是使用ssh -L 63333:127.0.0.1:5432 root@db_ip_address 制作隧道,这突然奏效了!谢谢!

以上是关于通过 SSH 隧道在 PostgreSQL 上进行身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

Robot Framework:通过 SSH 隧道连接到 PostgreSQL 数据库

使用 Python 通过 SSH 隧道连接到远程 PostgreSQL 数据库

使用 SSH 隧道的 PostgreSQL/psycopg2 密码验证

Metabase 和 Postgresql 之间的 SSH 隧道失败

致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器

使用带有公钥和密码的 SSH 隧道通过 SQLAlchemy 连接到远程 PostgreSQL 数据库,所有这些都来自 Windows 机器