通过SSH隧道使用PostgreSQL

83

我想使用RazorSQL连接我的远程服务器上运行的数据库。我在本地主机上使用以下命令创建了一个SSH隧道:

ssh -L 1111:remote.server.com:5432 myuser@remote.server.com

我通过RazorSQL的GUI配置我的连接,将主机指定为localhost,将端口指定为1111。当我单击“连接”时,会出现以下错误消息:

ERROR: An error occurred while trying to make a connection to
the database: 

JDBC URL: jdbc:postgresql://localhost:1111/myuser

FATAL:
no pg_hba.conf entry for host "aaa.bbb.ccc.ddd",
user "myuser", database "mydatabase", SSL off

aaa.bbb.ccc.ddd 是远程服务器的IP地址。

此外,我不允许更改我的 pg_hba.conf 文件内容。目前文件的内容如下所示:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
@remove-line-for-nolocal@local   all         all                               @authmethod@
# IPv4 local connections:
host    all         all         127.0.0.1/32          @authmethod@
# IPv6 local connections:
host    all         all         ::1/128               @authmethod@

我能否在不修改服务器配置的情况下,使用当前设置通过SSH隧道连接到数据库服务器?


1
“@authmethod@” 是什么意思? - Clodoaldo Neto
2个回答

134

您的pg_hba.conf文件似乎允许从本地主机进行连接。使您的SSH隧道连接看起来来自本地主机的最简单方法是将它们建立本地主机。

以下SSH命令将作为用户"user"连接到remote.example.com,并使您的ssh客户端侦听localhost,端口1111 / tcp。任何连接到该端口的连接都将通过ssh隧道转发,并且在ssh服务器端上,连接将被建立到localhost,端口5432 / tcp。由于我们连接到localhost,因此连接将看起来来自localhost,并且应与您现有的pg_hba.conf行匹配。

ssh -L 1111:localhost:5432 user@remote.example.com

如果这个隧道预计会长时间运行,我建议使用autossh
要在运行ssh客户端的主机上使用psql客户端连接,请使用以下类似的命令:
psql -h localhost -p 1111 -U your-db-username database-name

你将被提示输入数据库用户密码。
或者,你可以在客户端的主目录下创建一个名为.pgpass的文件,并添加以下一行内容:
localhost:1111:database-name:your-db-user:your-db-password

1
如果您收到“FATAL:用户” myuser “的密码身份验证失败”的消息,请确认您的用户名和密码是远程PostgreSQL实例的有效凭据。我已经更新了答案,并提供了一个通过隧道使用psql客户端连接的示例。 - jeff
12
"ALTER USER my-db-user WITH ENCRYPTED PASSWORD 'my-db-password'" 可以彻底解决这个问题。@jeff,感谢回复! - kozooh
kozoh,你找到让这成为默认设置的方法了吗?每次创建数据库都需要这样做有点烦人。 - Phil Donovan
@PhilDonovan,不需要,抱歉。但我认为你可以编写一个简单的脚本来自动化你创建数据库的过程。 - kozooh
1
@kozooh 是的!谢谢,谢谢!!我已经折腾了3天。如果我通过ssh登录到机器上,我可以使用密码登录psql控制台。但是,如果我尝试通过ssh隧道连接,它总是会给我一个“密码验证失败...”的错误。使用加密密码解决了这个问题! - dlehman
显示剩余2条评论

0

这是一个演示:

打开两个命令行窗口

在提示时输入密码

第一个

ssh -N -L 1111:127.0.0.1:5432 oracle@10.16.15.13 enter image description here

第二个

cd C:\Program Files\PostgreSQL\15\bin

psql -h localhost -p 1111 -U postgres postgres enter image description here

检查日期和版本 enter image description here

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接