PostgreSQL通过SSH隧道

koz*_*ooh 48 postgresql ssh tunnel razorsql

我想使用RazorSQL连接到我的远程服务器上运行的数据库.我使用以下命令在localhost上创建SSH隧道:

ssh -L 1111:remote.server.com:5432 myuser@remote.server.com
Run Code Online (Sandbox Code Playgroud)

我通过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
Run Code Online (Sandbox Code Playgroud)

哪里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@
Run Code Online (Sandbox Code Playgroud)

是否可以使用我当前的设置通过SSH隧道连接到数据库服务器,而无需修改服务器的配置?

jef*_*eff 79

您的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
Run Code Online (Sandbox Code Playgroud)

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

要使用运行ssh客户端的主机上的psql客户端进行连接,请使用以下内容:

psql -h localhost -p 1111 -U your-db-username database-name
Run Code Online (Sandbox Code Playgroud)

然后,系统会提示您输入数据库用户的密码.

或者,您可以.pgpass将以下行代码添加到运行psql的客户端上的主目录中调用的文件中:

localhost:1111:database-name:your-db-user:your-db-password
Run Code Online (Sandbox Code Playgroud)

  • `ALTER USER my-db-user with ENCRYPTED PASSWORD'my-db-password'`最终解决了这个问题.@jeff,谢谢你的回复! (9认同)