无法通过 SSH 连接到远程 Postgresql 数据库

无法通过 SSH 连接到远程 Postgresql 数据库

我正尝试通过 pgAdmin3 GUI 连接到远程服务器 myHost 端口 5432 上的 Postgresql 数据库。

服务器端 :

  • 我有一个与 postgresql 角色匹配的 Unix myUser。
  • pg_hba.conf 为:
    本地所有所有信任
    主机所有所有 127.0.0.1/32 信任

客户端 :

  • 我打开一个 ssh 隧道: ssh -L 3333:myHost:5432 myUser@myHost
  • 我通过 pgAdmin3 (或通过 psql -h localhost -p 3333 )连接到服务器。

我收到以下错误信息:
服务器意外关闭了连接这可能意味着服务器在处理请求之前或处理请求时异常终止。

我尝试使用 psql -h localhost -p 3333 --dbname=myDB --user=mySuperUser 以超级用户角色访问特定数据库,但没有成功。

我在设置中忘记了什么?
谢谢

答案1

检查远程主机是否允许隧道。您可以使用以下命令与客户端检查隧道是否被拒绝:

ssh -v -L 3333:myHost:5432 myUser@myHost

答案2

就我的情况而言,问题在于隧道以 IPv6 地址结束:

ssh -L 5434:localhost:5432 user@server

只要用我之前假设的地址替换 localhost 就足够了:

ssh -L 5434:127.0.0.1:5432 user@server

我生命中的 15 分钟就浪费了。:) 希望这可以节省别人的时间...

答案3

如果有人仍在寻找解决方案:

尝试在 /etc/ssh/sshd_config 中设置:

AllowTcpForwarding yes
GatewayPorts yes

然后:

service sshd restart

答案4

确保您实际上没有连接到 Postgres 的本地实例,该实例正在监听与您为隧道本地端选择的端口相同的端口。

如果本地端口正在使用中,ssh将打印一条错误消息并跳过设置隧道。但它仍将连接到远程服务器,这可能会导致错误从屏幕上滚动出来。由于您能够连接,因此您不会怀疑隧道出了什么问题,直到您作为最后的手段完全停止远程 Postgres 并发现您可以仍然连接。

不要问我怎么知道的。

相关内容