68

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

4

1 回答 1

117

您的 pg_hba.conf 似乎允许来自 localhost 的连接。使您的 SSH 隧道连接从 localhost 显示的最简单方法是将它们连接localhost。

以下 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或者,您可以在运行 psql 的客户端上的主目录中调用的文件中添加以下行:

localhost:1111:database-name:your-db-user:your-db-password
于 2013-05-30T14:02:09.357 回答