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

如何在QGIS中通过SSH隧道连接PostgreSQL数据库(仿PostgreSQL Maestro方式)

QGIS通过独立SSH隧道连接PostgreSQL的解决方案

第一步:先验证SSH隧道本身的可用性

在尝试QGIS连接前,先确认SSH隧道能正常建立并转发数据库流量:

  • 打开终端/命令提示符,执行SSH端口转发命令:
    ssh -L 本地映射端口:PostgreSQL主机地址:PostgreSQL端口 SSH用户名@SSH主机地址 -p SSH端口
    
    示例:ssh -L 54320:db.example.com:5432 ssh_user@ssh.example.com -p 2222
  • 保持终端窗口打开,另开一个终端用psql测试连接:
    psql -h localhost -p 本地映射端口 -U 数据库用户名 -d 目标数据库名
    
    如果能成功登录数据库,说明隧道本身没问题;如果失败,先解决SSH或数据库的连通性问题。

第二步:正确配置QGIS的PostgreSQL连接

QGIS的SSH隧道配置逻辑和PostgreSQL Maestro一致,需严格对应参数:

  1. 在QGIS浏览器面板,右键「PostgreSQL」→「New Connection...」
  2. 切换到SSH选项卡,勾选「Use SSH tunnel」,填写:
    • SSH host:SSH服务器的IP/域名
    • SSH port:SSH服务的端口(非默认22的话填自定义端口)
    • SSH username:SSH登录用户名
    • SSH password:SSH登录密码(若用密钥认证,可选择密钥文件路径)
  3. 返回Connection选项卡,填写数据库参数:
    • Host:必须填localhost(因为隧道将远程数据库端口映射到本地)
    • Port:填写你设置的本地映射端口(如54320)
    • Database:目标数据库的名称
    • Authentication:选择「Basic」,填写数据库的独立用户名和密码
  4. 点击「Test Connection」验证连接

常见错误排查(针对「Server closed the connection unexpectedly」)

  • SSH服务器禁止端口转发:登录SSH服务器,检查/etc/ssh/sshd_config中的AllowTcpForwarding是否设为yes,若为no则修改后重启sshd服务(systemctl restart sshd)
  • 本地映射端口被占用:用netstat -ano | findstr 本地端口(Windows)或lsof -i :本地端口(Linux/macOS)查看占用进程,更换未被使用的端口
  • 数据库防火墙限制:确保PostgreSQL服务器的防火墙允许SSH服务器的IP访问其数据库端口(默认5432)
  • PostgreSQL权限配置:修改数据库的pg_hba.conf文件,添加允许SSH服务器IP访问的规则,示例:
    host all 数据库用户名 SSH服务器IP/32 md5
    
    修改后重启PostgreSQL服务(systemctl restart postgresql)
  • QGIS驱动版本问题:更新QGIS到最新稳定版,确保内置的PostgreSQL驱动版本与目标数据库版本兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:32