【发布时间】:2020-05-31 19:27:19
【问题描述】:
我正在尝试通过 ssh 隧道连接到 PostgreSQL 数据库。它设置为侦听端口 3333 并转发到装有数据库的机器上的端口 5432。我可以通过隧道使用psql 命令和密码验证进行连接,但由于某种原因,当我尝试通过隧道使用psycopg2 进行连接时,我收到错误FATAL: password authentication failed for user database_user。我尝试在用户名和密码周围加上引号,但无济于事。
成功的psql 命令:
psql -h localhost -p 3333 -U database_name database_user
#This command brings up password prompt
pscyopg2 命令失败:
psycopg2.connect("dbname='database_name' user='database_user' host='localhost' password='database_password' port=3333")
输出:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/database_user/.local/share/virtualenvs/project-QNhT-Vzg/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: password authentication failed for user "database_user"
FATAL: password authentication failed for user "database_user"
这是我pg_hba.conf的一部分供参考:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
【问题讨论】:
-
这不足以找出您的问题。有防火墙吗? postgres 是否在监听接口?您能否解决这些问题并添加特定的 Python 代码和错误跟踪,因为它肯定包含有关问题所在的信息。
-
看来您的密码不是您想的那样。您可以访问 postgres,并且 ACL (pg_hba) 是正确的。错误很典型:密码不匹配。你确定没有错别字?你设置了这个密码吗?当您尝试使用 psql 时,您是处于本地模式还是主机模式?
-
不知何故它最终通过使用单引号中的密码创建一个环境变量来工作。如果您回答有关检查密码的问题,我会将其标记为已接受的答案。谢谢你的帮助! @jlandercy
-
您好 Gunnar,添加了包含更多详细信息和检查清单的答案。干杯
标签: django python-3.x postgresql psycopg2 ssh-tunnel