通过端口转发连接到 Virtualbox 内的 postgresql 失败

通过端口转发连接到 Virtualbox 内的 postgresql 失败

我在由 vagrant 创建的 virtualbox 中有一个 postgresql 服务器。

我还通过 Vagrant 文件设置了从盒子内部的 5432 到主机系统上的 15432 的端口转发。

当通过连接时psql

$ psql dbname username -h 127.0.0.1 -p 15432

psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

服务器和客户端均运行 Ubuntu 12.04(postgresql-9.1,版本:9.1+129ubuntu1)

在虚拟机内部连接到端口 5432 工作正常。

端口转发本身似乎并没有完全出错,因为当我尝试另一个端口时,我收到“连接被拒绝”的信息)

答案1

您是否将 Postgres 配置为监听公共接口?默认情况下,它仅监听环回适配器

如果您使用 Postgres cookbook,则需要设置属性:

set['postgresql']['config']['listen_addresses'] = '*'

这对应于 postgresql.conf 中的 listen_addresses 参数

并且可能将 pg_hba 开放给 Postgres 认为您的连接正在进入的网络:

再次强调,Chef 的属性如下:

set['postgresql']['pg_hba'] = [
    {:type => 'local', :db => 'all', :user => 'all', :addr => nil, :method => 'trust'},
    {:type => 'host', :db => 'all', :user => 'all', :addr => '127.0.0.1/32', :method => 'trust'},
    {:type => 'host', :db => 'all', :user => 'all', :addr => '10.0.0.0/16', :method => 'trust'}
]

答案2

使用 SSH 隧道:

在主机上运行此命令,将主机上的端口 5454 映射到 VirtualBox 客户机上的端口 5432(PostgreSQL 的默认端口)。此示例假设您已经设置了端口转发,将主机的端口 2222 映射到客户机的 SSH 默认端口(端口 22)。

ssh -p 2222 -f -L 5454:127.0.0.1:5432 dev@localhost -N
  • 主机端口:5454
  • 主机地址:127.0.0.1
  • 来宾端口:5432
  • 来宾帐户:dev
  • 来宾服务器:localhost

运行此命令后,您应该能够使用“localhost”和端口 5454 建立与客户机的 postgresql 服务器的连接。例如,

psql -h localhost -p 5454 -U postgres

相关内容