我在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'连接,这是我想要做的?我知道我输入的密码是正确的(我已经更改了),但由于某种原因它无效。
答案 0 :(得分:25)
我遇到了同样的问题。问题出在主机端,基本上防火墙阻塞了我正在使用的端口。所以这就是我所做的(我使用的是OSX Mavericks)
打开端口(主机)
sudo ipfw add 7000 allow tcp from any to any dst-port 7001
修改Vagrantfile以允许端口转发
config.vm.network "forwarded_port", guest: 5432, host: 7001
编辑postgresql.conf(访客)
listen_addresses = '*'
修改pg_hba.conf
(您可能希望更好地调整此内容)
host all all 0.0.0.0/0 md5
现在,从主机连接正常使用端口(在我的情况下为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的连接。