通过SSH隧道的PostgreSQL

xxb16uws  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(182)

我想使用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隧道连接到数据库服务器,而无需修改服务器的配置?

sg2wtvxw

sg2wtvxw1#

您的pg_hba.conf似乎允许从localhost连接。使SSH隧道连接从localhost显示的最简单方法是将它们设置为localhost。
下面的SSH命令remote.example.com以用户“user”的身份连接到www.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

然后,系统将提示您输入数据库用户的密码。
或者,您可以在运行psql的客户端的主目录中添加一个如下行到名为.pgpass的文件中:

localhost:1111:database-name:your-db-user:your-db-password
s2j5cfk0

s2j5cfk02#

这里有一个Demo:

打开两个cmd窗口
提示时输入密码

首先

ssh -N -L 1111:127.0.0.1:5432 oracle@10.16.15.13

cd C:\Program Files\PostgreSQL\15\bin
psql -h localhost -p 1111 -U postgres postgres

检查日期和版本

谢谢!

相关问题