使用端口转发到另一台机器访问远程 PostgreSQL 服务器

Thi*_*and 3 postgresql networking ssh port-forwarding forwarding

我尝试访问运行 PostgreSQL的Server_A。该服务器位于本地网络上,这就是为什么我必须从可访问且位于同一网络中的Server_B转发端口。

要访问Server_B上的 postgreSQl ,我可以轻松地转发这样的端口:

ssh -L 54320:Server_A:5432 user@Server_B
Run Code Online (Sandbox Code Playgroud)

而在另一个终端:

psql -p 54320 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

我的问题是我想重现从Server_B网络中存在的机器完成的连接。这台机器可以使用以下命令将自己连接到数据库:

psql -h Server_A -p 5432 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

我实际上有问题:

我无法使用 ssh 命令转发 5432 端口:

通过插入5432:Server_A:5432ssh 命令来转发 5432 端口,我有这个错误:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Run Code Online (Sandbox Code Playgroud)

我无法解析主机名:

而是直接向前从港口的SERVER_A,我尝试着从港口SERVER_B-h在参数psql命令。

ssh -L 5432:127.0.0.1:5432 user@Server_B
Run Code Online (Sandbox Code Playgroud)

和 :

psql -h Server_A -p 5432 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

但是在这里,主机名无法解析......

有什么解决办法吗?

Dan*_*ité 6

这个命令:

ssh -L 54320:Server_A:5432 user@Server_B
Run Code Online (Sandbox Code Playgroud)

看起来不错,但是当这样做时:

psql -p 54320 -d db_name -U user
Run Code Online (Sandbox Code Playgroud)

不使用 ssh 隧道,因为默认情况下在 Unix 上,psql连接到Unix 域套接字,就像您提到的错误消息所建议的那样(“...接受 Unix 域套接字上的连接...”)

你只是缺少一个-h localhost选项。尝试:

   psql -p 54320 -d db_name -U user -h localhost
Run Code Online (Sandbox Code Playgroud)

之前曾之间建立一个SSH隧道localhost:54320Server_A:5432通过Server_B,这将在达到Postgres的Server_A:5432