如何在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测试连接:
如果能成功登录数据库,说明隧道本身没问题;如果失败,先解决SSH或数据库的连通性问题。psql -h localhost -p 本地映射端口 -U 数据库用户名 -d 目标数据库名
第二步:正确配置QGIS的PostgreSQL连接
QGIS的SSH隧道配置逻辑和PostgreSQL Maestro一致,需严格对应参数:
- 在QGIS浏览器面板,右键「PostgreSQL」→「New Connection...」
- 切换到SSH选项卡,勾选「Use SSH tunnel」,填写:
- SSH host:SSH服务器的IP/域名
- SSH port:SSH服务的端口(非默认22的话填自定义端口)
- SSH username:SSH登录用户名
- SSH password:SSH登录密码(若用密钥认证,可选择密钥文件路径)
- 返回Connection选项卡,填写数据库参数:
- Host:必须填
localhost(因为隧道将远程数据库端口映射到本地) - Port:填写你设置的本地映射端口(如54320)
- Database:目标数据库的名称
- Authentication:选择「Basic」,填写数据库的独立用户名和密码
- Host:必须填
- 点击「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访问的规则,示例:
修改后重启PostgreSQL服务(host all 数据库用户名 SSH服务器IP/32 md5systemctl restart postgresql) - QGIS驱动版本问题:更新QGIS到最新稳定版,确保内置的PostgreSQL驱动版本与目标数据库版本兼容
内容的提问来源于stack exchange,提问作者Hasan
相关产品推荐
相关产品推荐

