You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过SSH隧道连接PostgreSQL数据库报未知参数错误

报错原因

该报错由参数名拼写错误直接导致:你传入的remote_bind_adress不是SSHTunnelForwarder支持的合法参数,正确参数名应为remote_bind_address——单词address拼写时漏写了第二个d,库无法识别该未知参数,因此抛出ValueError。

除了触发报错的拼写问题外,你当前代码还存在3个会导致后续连接失败的问题:

  • 私钥路径存在多余空格:"C:/~ /.ssh/User1_id_rsa"中~与/.ssh之间的空格会导致程序找不到对应私钥文件
  • 手动调用server.start()属于冗余逻辑:使用with上下文管理器时,隧道的启动、关闭会被自动处理,重复调用启动方法可能引发异常
  • 缺少数据库连接逻辑:SSH隧道启动后会在本地开放一个映射到远程数据库的端口,psycopg2需要连接本地的这个端口才能访问数据库,直接连远程数据库地址无法走通隧道
修正后的完整连接代码
import sshtunnel
import psycopg2

if __name__ == '__main__':
    print('Connecting to the postgre database...')
    try:
        with sshtunnel.SSHTunnelForwarder(
                ssh_address_or_host="someproxy.something.io",
                ssh_username="User1",
                ssh_private_key="C:/~/.ssh/User1_id_rsa",
                ssh_private_key_password="Password1",
                remote_bind_address=("mydatabase-postgres.something.io", 5432)
        ) as server:
            # 连接隧道映射的本地端口
            db_conn = psycopg2.connect(
                host="127.0.0.1",
                port=server.local_bind_port,
                dbname="替换为你的PostgreSQL库名",
                user="替换为你的PostgreSQL用户名",
                password="替换为你的PostgreSQL密码"
            )
            # 此处编写数据库查询、操作逻辑
            print("数据库连接成功")
            db_conn.close()
    except Exception as e:
        print(f"连接失败,错误信息:{str(e)}")
补充说明

如果你之前在DBeaver中配置了固定的本地转发端口,也可以在初始化SSHTunnelForwarder时新增参数local_bind_address=("127.0.0.1", 你自定义的本地端口号),psycopg2连接时port参数对应填这个自定义端口即可。

内容的提问来源于stack exchange,提问作者LJZB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:15:37