postgresql - 通过 Unix 套接字将 DBeaver 连接到远程 PostgreSQL DB

标签 postgresql ssh unix-socket dbeaver

我最近安装了https://dbeaver.io/在 Windows PC 上并希望从中访问远程 Linux 服务器上的数据库。

我的 Linux 用户名是 my_username,我还有一个系统用户 psql_user。我还有两个现有的 PostgreSQL 数据库,其名称与其各自的用户相同。通常,仅使用 psql_user,并且由监听 Unix 套接字并以用户 psql_user 身份运行的 php-fpm 池访问,因此已配置 /var/lib/pgsql/12/data/pg_hba.conf为:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer
host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

通过上述配置,在 ssh 到服务器后,我可以通过执行 psql 访问 my_username 数据库,也可以通过执行 sudo -u psql_user psql< 访问 psql_user 数据库 并且不需要使用密码。

但是现在,如何从远程 Windows PC 进行连接?

为了尝试这样做,我首先在 Windows PC 上为 my_username 和 psql_user 创建了没有密码的 ssh key ,并将公钥添加到每个 Linux 用户的authorized_keys 中(必须手动创建 /home/psql_user/ 因为它是系统用户)。我可以使用 ssh key 成功地将 PuTTY 连接到服务器。

接下来,在 DBeaver 连接设置 SSH 选项卡上,我选中“使用 SSH 隧道”,输入用户名和私钥位置,测试隧道配置成功显示与客户端版本的连接为 SSH- 2.0-JSCH-01.54 和服务器版本为 SSH-2.0-OpenSSH_7.4。我也没有对此选项卡的高级部分(例如本地和远程主机和端口)进行任何更改,并且还将“您可以在 SSH 参数中使用变量”保留为其默认值。

在主选项卡中使用我的服务器 IP,身份验证“数据库 native ”,并将密码保留为空,我测试连接,但得到 连接尝试失败。 syslog 报告该连接到端口上的 IP 5432 失败,这是有道理的,因为我是使用 Unix 套接字设置的。

因此,我将主选项卡上的服务器 IP 更改为 127.0.0.1(或 localhost),然后重试,但得到FATAL: Identauthentication failed for user "my_username"。好的,更接近一点,但还不够。

我认为这可能是因为 DBeaver 正在传递端口,所以我尝试通过进入“编辑驱动程序”选项卡并更改 jdbc:postgresql://{host}[:{port}]/[ 来禁用此部分{database}]jdbc:postgresql://{host}/[{database}],但现在得到 Connection to 127.0.0.1:5432rejected。检查主机名和端口是否正确以及邮局管理员是否正在接受 TCP/IP 连接

不知道下一步该去哪里。当我用 PuTTY 进入 Linux 机器时,一切都很好,但使用 DBeaver 远程连接时则不然,并且认为如果我使用 SSH 将 DBeaver 连接到服务器,情况也会一样。如何实现这一点?

最佳答案

正如另一个答案中所指出的,DBeaver 的 SSH 隧道选项当前不支持套接字。它始终基于 TCP 端口,因此仅使用 host 的连接可以在 pg_hba.conf 中设置选项(我在 DBeaver 中放置了 feature request 用于 SSH 套接字转发)。

以下是如何设置本地 TCP 端口到远程 Unix 套接字的转发。这允许您使用 peer通过 Unix 套接字进行身份验证,因此您不必为 PostgreSQL 角色提供密码:

ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b3c6c0d6c1ddd2ded6f3d7d1c0d6c1c5d6c19dd6cbd2dec3dfd69dd0dcde" rel="noreferrer noopener nofollow">[email protected]</a> -L 5555:/var/run/postgresql/.s.PGSQL.5432 -fN

关于postgresql - 通过 Unix 套接字将 DBeaver 连接到远程 PostgreSQL DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62733208/

相关文章:

java - ssh:重定位错误:ssh:符号 EVP_enc_null,版本 OPENSSL_1.0.0 未在具有链接时间引用的文件 libcrypto.so.1.0.0 中定义

linux unix套接字与tcp套接字发送缓冲区大小

java - Java的UNIX套接字实现?

c - UNIX SOCKET - 可以直接写入套接字的内存吗?

sql - 如何在 PostgreSQL 中生成月份列表?

sql - 简化用于列出表和索引大小的 Postgresql 查询?

linux - 无法从 Arch Linux ssh 进入 Beaglebone Black

json - 如何为 play-scala anorm pgsql 设置 jsonb[] 的类型

performance - PostgreSQL 临时表

ssh - 如何让 Hudson CI 通过 SSH 检查 CVS 项目?