我最近在Windows PC上安装了https://dbeaver.io/,希望从中访问远程Linux服务器上的数据库。
我的Linux用户名是my_username,我也有一个系统用户psql_user。我也有两个现有的PostgreSQL数据库,它们的名称与各自的用户相同。通常,只有psql_user被使用,并且被php-fpm池访问,侦听Unix套接字并以psql_user用户身份运行,因此将/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
通过上述配置,在登录到服务器后,我可以通过执行psql
访问my_username数据库,也可以通过执行sudo -u psql_user psql
访问psql_user数据库,不需要使用密码之一。
但是现在,如何从远程Windows PC连接?
为此,我首先在Windows PC上为my_username和psql_user创建了不带口令的ssh密钥,并将公用密钥添加到每个Linux用户的authorized_keys中(由于它是一个系统,因此必须手动创建/home/psql_user/
用户)。我可以使用ssh键成功将PuTTY粘贴到服务器。
接下来,在DBeaver连接设置SSH选项卡上,我选中了“使用SSH隧道”,输入了用户名和私钥位置,Test tunnel configuration
已成功显示与客户端版本的连接为SSH-2.0-JSCH-01.54服务器版本为SSH-2.0-OpenSSH_7.4。我还没有更改此选项卡的“高级”部分,例如本地和远程主机和端口,并且也将“可以在SSH参数中使用变量”保留为其默认值。
使用主选项卡“身份验证”中的“数据库本机”中的服务器IP,并保留密码为空,我测试了连接,但得到The connection attempt failed.
的系统日志报告,与端口5432上IP的连接失败,这是有道理的,因为是使用Unix套接字设置的。
因此,然后我将主选项卡上的服务器IP更改为127.0.0.1(或localhost),然后重试,但得到FATAL: Ident authentication failed for user "my_username"
。好的,再靠近一点,但不完全是那边。
我认为可能是因为DBeaver正在传递端口,所以我尝试通过进入“编辑驱动程序”选项卡并将jdbc:postgresql://{host}[:{port}]/[{database}]
更改为jdbc:postgresql://{host}/[{database}]
来禁用此部分,但是现在获得了Connection to 127.0.0.1:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
不确定下一步要去哪里。当我将PuTTY插入Linux机器时,一切都很好,但是使用DBeaver进行远程连接时就不好了,并认为如果我使用SSH将DBeaver连接到服务器也是如此。如何做到这一点?
答案 0 :(得分:0)
虽然我认为可以将ssh隧道设置为连接到unix套接字而不是端口,但dbeaver并没有提供这样做的方法,因此您必须单独设置它。
尽管如果服务器运行identd服务,ident也应该起作用。我认为大多数linux默认情况下都不这样做,但是只要apt install oidentd
或您的程序包管理器上的任何等效命令都可以解决此问题。
更简单的解决方案是将方法从ident更改为md5或scram,然后分配一个密码(dbeaver提供用于记忆)。
答案 1 :(得分:0)
如另一个答案中所指出的那样,DBeaver的SSH隧道选项当前不支持套接字。它始终基于TCP端口,因此只能使用pg_hba.conf中的// somewhere outside your handler/function
let reviewed = false;
// inside
if(scrollAmount > documentHeight*0.3 && !PassedValue && !reviewed) {
reviewed = true;
// your logic here
}
选项进行连接(我在DBeaver中放置了feature request用于SSH套接字转发)。
这是设置本地TCP端口到远程Unix套接字的转发的方法。这使您可以在Unix套接字上使用host
身份验证,因此不必为PostgreSQL角色提供密码:
peer