11

我有一个使用 Vagrant 设置的 VM,上面运行 Postgres(在端口 5432 上),转发到主机上的端口 8280。

我已经为默认用户设置了密码,我可以在本地连接就好了。

我一直在尝试通过端口 8280 设置从主机的访问权限,但我无法让它使用“MD5”作为信任方法。

我已设置postgresql.conf监听所有地址:

# postgresql.conf
listen_addresses = '*'

我配置pg_hab.conf如下:

# pg_hab.conf
#TYPE   DATABASE  USER  CIDR-ADDRESS  METHOD
host    all       all   0.0.0.0/0     md5

使用所有这些设置,如果我从主机运行以下命令:

psql --host=127.0.0.1 --port=8280 --username=postgres -d mydb -c '\l'

系统提示我输入密码,然后我得到:

psql: FATAL:  password authentication failed for user "postgres"

如果我随后将 METHOD 从“md5”更改为“信任”,则不会要求我输入密码,并且可以按预期连接。我的问题是 - 为什么我不能使用“md5”连接,这是我想要做的?我知道我输入的密码是正确的(我已经更改了它),但由于某种原因它不起作用。

4

2 回答 2

25

我有同样的问题。问题出在主机端,基本上防火墙阻止了我使用的端口。所以这就是我所做的(我正在使用 OSX Mavericks)

  1. 打开端口(主机)

    sudo ipfw add 7000 allow tcp from any to any dst-port 7001

  2. 修改 Vagrantfile 以允许端口转发

    config.vm.network "forwarded_port", guest: 5432, host: 7001

  3. 编辑 postgresql.conf(来宾)

    listen_addresses = '*'

  4. 编辑pg_hba.conf(您可能想要更好地调整它)

    host all all 0.0.0.0/0 md5

  5. 现在,使用端口(在我的情况下为 7001)和“localhost”作为主机地址从主机正常连接

于 2014-02-10T17:01:49.637 回答
1

您需要为postgres用户设置密码。它默认没有一个,因此您无法连接。

ALTER USER postgres PASSWORD 'somepassword';

您的本地连接可能有效,因为它们使用带有peer身份验证的 unix 套接字,而不是 TCP/IP。如果您使用:

psql -h 127.0.0.1 -U postgres postgres

在 VM 上,您可能会发现这也失败了,因为您现在实际上是在测试基于 TCP/IP 的连接。

于 2013-01-04T02:14:18.740 回答