当前位置: 首页 > 知识库问答 >
问题:

通过SSH隧道的PostgreSQL

邢高澹
2023-03-14

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

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

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

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个答案

翟默
2023-03-14

您的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

如果这是一个长期运行的隧道,我建议使用AutoSh

要在运行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

 类似资料:
  • 问题内容: 我的目的是连接到位于防火墙后面的服务器(主机)。我可以通过连接到网络中的另一台服务器(隧道)然后通过SSH到该服务器来访问此服务器。但是,我无法通过JSch实现相同的方案。 我无法为此编写以下代码。如果我在这里做任何愚蠢的事情,请告诉我。 上面的代码在行中给出了以下异常。 问题答案: jsch上的代理设置允许您连接到远程端上 正在运行的 代理服务器。一个在远程端将 不 被视为一个代理。

  • 问题内容: 我已经在两个服务器 A 和 B 之间建立了SSH隧道。 B 有MySQL服务器,这可行: 虽然这不是: 尽管my.cnf具有以下几行: 现在关于隧道。它连接以下内容: 但是当(在 A上 ,端口转发)时,我会 我懂了 当我这样做 我懂了 可能是什么原因?我究竟做错了什么? 问题答案: 这里有三个问题。 1-暂时忘记SSH隧道 您不能将MySQL绑定到多个特定IP。第一个子句被第二个子句覆

  • 我有两台机器:machine foo()运行redis服务器,而machine bar()运行通过Jedis连接到foo的java应用程序。当给jedis提供地址时,一切都很好。 但是我不信任foo和bar之间的路由器,redis也不支持SSL。因此,我设置了一个从bar到foo:的ssh隧道 现在,从bar中,我可以直接在或通过隧道在成功地telnet到foo上的redis。对于jedis,如果

  • 问题内容: 我最近开始学习Hibernate技术,不得不使用Hibernate从数据库中获取数据。问题是我只能通过SSH隧道连接到数据库。我可以在文件中使用任何属性来解决此问题吗?或者,您可以建议另一种新手可以理解的方式。 问题答案: 也许使用Jsch。一些示例可以为您提供解决之道。 另一种方法是使用HTTP代理处理程序和端口转发功能来实现自己的SSH SocketFactory。起点可以是: 您

  • 我想通过SSH隧道访问jupyter笔记本,并遵循以下方法 要总结-: 1.登录远程机器 2.在新航站楼: 3.然后转到浏览器,然后转到 现在我的问题是:我只能在两个步骤中访问远程机器 jupyter笔记本电脑只安装在我的电脑上。 当我用较长的登录过程替换第一步的第一行时,第二步应该写什么? 当我插入remote_user=username和remote_user=my_pc_name时,我从ju

  • 我正在阅读SSH隧道-本地和远程端口转发示例说明 关于本地转发,可以使用 我不明白的是username@example.com。example.com应该是什么? 在我的环境中,我运行一台服务器,在host1的8888端口上侦听,在host2中我运行 访问host2:9999,我将进入登录页面。如果我改变myname@host1到myname@host2即使myname@host3,我也可以进入登