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

Pyc*_*ycz 5 postgresql ssh ssh-tunnel

我有 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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ité 6

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

作为解决方案,您可以:

  • 更改pg_hba.conf为设置trust方法::1/128,因为已经是这种情况127.0.0.1/32

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