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
相关产品推荐
相关产品推荐

