能连通ssh隧道必须同时满足:跳板机可ssh登录、postgresql监听127.0.0.1、pg_hba.conf明确允许127.0.0.1/32连接;navicat中ssh页填跳板机信息,常规页主机必须填127.0.0.1且端口为postgresql实际端口。
能连,但必须同时满足三个条件:跳板机可ssh登录、postgresql在跳板机上监听127.0.0.1、pg_hba.conf明确允许该地址连接。缺一不可,光填对navicat里的ssh参数没用。
Navicat里SSH隧道配置的关键字段
打开新建 PostgreSQL 连接 → 切到 SSH 选项卡 → 勾选 使用SSH隧道:
-
SSH 主机名/IP:跳板机(或目标服务器)的真实IP或域名,不是数据库服务器的地址 -
SSH 端口:通常是22,若跳板机改过端口需同步填写 -
用户名:跳板机上的系统账户(如ubuntu、ec2-user),不是PostgreSQL用户 -
密码或私钥文件:二选一;用私钥时确保id_rsa权限是600(Linux/macOS下chmod 600 ~/.ssh/id_rsa) -
数据库主机(在常规选项卡):必须填127.0.0.1,不能填localhost或远程数据库IP -
数据库端口(在常规选项卡):填跳板机上 PostgreSQL 实际监听的端口(如5432),不是SSH端口
连不上?先确认跳板机本地能否访问PostgreSQL
Navicat报错 FATAL: no pg_hba.conf entry 或连接超时,大概率是跳板机自己都连不上自己的PostgreSQL。别急着调Navicat,先登跳板机执行:
- 运行
psql -h 127.0.0.1 -U <dbuser> -d <dbname></dbname></dbuser>—— 必须能成功登录 - 检查
postgresql.conf中listen_addresses是否包含'127.0.0.1'(不是'localhost',某些系统解析不一致) - 检查
pg_hba.conf是否有类似这行:host all all 127.0.0.1/32 md5,且位置靠前(规则从上往下匹配) - 改完配置后执行
sudo systemctl reload postgresql(不要 restart,避免中断现有连接)
连接成功但卡顿、断连、大查询失败
SSH隧道是长连接,中间网络设备(如公司防火墙、云厂商NAT网关)可能静默关闭空闲连接,导致Navicat突然“无响应”或报 server closed the connection unexpectedly:
- 在Navicat的SSH设置里,
高级→ 勾选保持连接活跃,或手动加参数(部分版本支持):-o ServerAliveInterval=30 -o ServerAliveCountMax=3 - 避免用笔记本休眠后继续复用旧隧道——关掉Navicat重连比等自动恢复更可靠
- 导出大数据量时,用
pg_dump命令直连127.0.0.1:5433(你设的本地转发端口),别在Navicat里点“导出”拖太久 - Navicat自身连接池或查询超时设置(如
连接超时、查询超时)建议设为0(不限制)或至少300秒,避免误判
最常被忽略的一点:SSH隧道本身不加密PostgreSQL流量,它只是把TCP流套在SSH里转发;真正决定连接安全的是跳板机上的 pg_hba.conf 认证方式和PostgreSQL是否启用SSL。别以为开了SSH隧道就等于全链路加密了。











