![通过端口转发连接到 Virtualbox 内的 postgresql 失败](https://linux22.com/image/1341727/%E9%80%9A%E8%BF%87%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E8%BF%9E%E6%8E%A5%E5%88%B0%20Virtualbox%20%E5%86%85%E7%9A%84%20postgresql%20%E5%A4%B1%E8%B4%A5.png)
我在由 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