我有一个 PostgreSQL 服务器,它只允许本地连接。
我正在使用“Navicat for PostgreSQL Lite”进行一些管理操作。在此客户端中,我配置了到服务器的 SSH 隧道。一切正常。
今天,我想使用另一个客户端,但它不允许我配置内部的 SSH 隧道。因此,我尝试手动打开 SSH 隧道:
ssh -L 15021:myserver.com:5432 [email protected]
但是当我尝试将其与客户端一起使用时,它说连接被拒绝。在 SSH 提示中,我收到了此消息。
channel 3: open failed: connect failed: Connection refused
我试过
psql -h localhost -p 15021 db_name
同样的错误 ...
我不明白 Navicat 有什么神奇的功能,而我手动使用 SSH 隧道却做不到。我非常确定 PostgreSQL 监听端口 5432。
谢谢您的任何指点或解答。
编辑:
这是一次尝试记录LogLevel DEBUG
。我匿名化了主机名。
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: ctype direct-tcpip rchan 3 win 2097152 max 32768
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_request_direct_tcpip: originator ::1 port 64027, target myserver.com port 5432
Sep 13 14:57:23 myserver sshd[27793]: debug1: connect_next: host myserver.com ([xxx.xx.xx.xxx]:5432) in progress, fd=9
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: new [direct-tcpip]
Sep 13 14:57:23 myserver sshd[27793]: debug1: server_input_channel_open: confirm direct-tcpip
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: connection failed: Connection refused
Sep 13 14:57:23 myserver sshd[27793]: error: connect_to myserver.com port 5432: failed.
Sep 13 14:57:23 myserver sshd[27793]: debug1: channel 1: free: direct-tcpip, nchannels 2
答案1
ssh -L 15021:myserver.com:5432[电子邮件保护]
这不是建立隧道的典型方式,因为它要求远程 SSH 服务器通过其公共 IP 地址连接到 PostgreSQL ( myserver.com
)
这是Connection refused
因为 postgres 不监听其公共地址。这是通常的默认情况。
你可能想做的是:
ssh -L 15021:localhost:5432 [email protected]
在这种情况下,SSH 将路由数据库连接来自你的 localhost:15021
到localhost:5432
远程主机,这大概就是数据库需要连接的地方。