无法使用MD5方法连接到主机上运行在VM上的Postgres

时间:2013-01-03 12:31:32

标签: postgresql postgresql-9.1 vagrant

我在Vagrant上设置了一个运行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'更改为'trust',我就不会要求输入密码,我可以按预期连接。我的问题是 - 为什么我不能使用'md5'连接,这是我想要做的?我知道我输入的密码是正确的(我已经更改了),但由于某种原因它无效。

2 个答案:

答案 0 :(得分: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'作为主机地址

答案 1 :(得分:1)

您需要为postgres用户设置密码。它默认没有,所以你无法连接。

ALTER USER postgres PASSWORD 'somepassword';

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

psql -h 127.0.0.1 -U postgres postgres
在虚拟机上,你可能会发现它也失败了,因为你现在实际上正在测试基于TCP / IP的连接。

相关问题