psycopg2 从 Windows 连接,但不能从 Ubuntu 连接

发布于 2025-01-16 22:50:06 字数 1548 浏览 2 评论 0原文

我的 Postgres 数据库仅接受来自本地主机的请求。来自远程计算机的请求依赖于 SSH 隧道。

with SSHTunnelForwarder(
        ('my.db.ip.address', 22),
        ssh_username='ssh_user_name',
        ssh_private_key='id_rsa.pem',
        remote_bind_address=('127.0.0.1', 5432)) as server:
    conn = psycopg2.connect(database="my_db", port=server.local_bind_port, user=id, password=pwd)
    curs = conn.cursor()
    sql = "select t.id from public.my_table t"

此代码适用于 Windows 机器。在 Ubuntu 上它失败了,

  File "/home/me/projects/compliance/response_generator.py", line 22, in get_rows
    conn = psycopg2.connect(database="my_db", port=server.local_bind_port, user=id,password=pwd)
  File "/home/me/anaconda3/envs/my_env/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server on socket "/tmp/.s.PGSQL.38945" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

原因是什么以及如何修复它?

----更新-----

tunnel = SSHTunnelForwarder(
  ('my.db.ip.address', 22),
  ssh_username='ssh_user_name',
  ssh_private_key='exdtras.dat',
  remote_bind_address=('localhost', 5432),
  local_bind_address=('localhost',6543), # could be any available port

返回 raise ValueError('No password or public key available!') ValueError: No password or public key available!

知道为什么这段代码可以在 Windows 上运行,但是Ubuntu 上失败?

My Postgres database only accepts requests from localhost. Requests from a remote computer rely on SSH tunnel.

with SSHTunnelForwarder(
        ('my.db.ip.address', 22),
        ssh_username='ssh_user_name',
        ssh_private_key='id_rsa.pem',
        remote_bind_address=('127.0.0.1', 5432)) as server:
    conn = psycopg2.connect(database="my_db", port=server.local_bind_port, user=id, password=pwd)
    curs = conn.cursor()
    sql = "select t.id from public.my_table t"

This code works from Windows machine. On Ubuntu it fails with

  File "/home/me/projects/compliance/response_generator.py", line 22, in get_rows
    conn = psycopg2.connect(database="my_db", port=server.local_bind_port, user=id,password=pwd)
  File "/home/me/anaconda3/envs/my_env/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server on socket "/tmp/.s.PGSQL.38945" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

What could be the reason and how to fix it?

----Update-----

tunnel = SSHTunnelForwarder(
  ('my.db.ip.address', 22),
  ssh_username='ssh_user_name',
  ssh_private_key='exdtras.dat',
  remote_bind_address=('localhost', 5432),
  local_bind_address=('localhost',6543), # could be any available port

Returns raise ValueError('No password or public key available!') ValueError: No password or public key available!

Any idea why this code works on Windows, but fails on Ubuntu?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文