navicat可通过ssh隧道连接oracle,前提是sshd_config中allowtcpforwarding为yes且oracle监听127.0.0.1:1521;ssh页填公网ip、端口22、系统用户名及私钥,常规页主机必须填localhost或127.0.0.1,服务名须与lsnrctl status完全匹配。
navicat 可以通过 ssh 隧道连接 oracle,但必须满足两个前提:远程服务器的 sshd_config 中 allowtcpforwarding 设置为 yes,且 oracle 实例监听的是本地可访问的地址(如 127.0.0.1:1521 或 localhost:1521),不能仅绑定在私有网卡或禁用 loopback。
SSH 隧道配置页必须填对这 4 项
在 Navicat for Oracle 新建连接窗口中,切换到 SSH 选项卡并勾选 使用SSH隧道 后,以下字段缺一不可且容易填错:
-
主机:填远程服务器的公网 IP 或域名(不是 Oracle 数据库的地址) -
端口:填 SSH 服务端口,默认22;若托管商改过(如2222),必须同步修改 -
用户名:Linux/macOS 系统账号(如oracle、appuser),不是 Oracle 的SYSTEM或scott -
认证方式:优先选公钥并指定.ppk或 OpenSSH 格式私钥路径;若用密码,确保该用户密码未过期、未被 PAM 策略拒绝
Oracle 连接参数里“主机名”只能写 localhost
切回 常规 选项卡后,主机名/IP地址 字段必须填 localhost 或 127.0.0.1 —— 这是整个隧道能通的关键。很多人填服务器公网 IP 或内网 IP,结果报错 ORA-12170: TNS:Connect timeout occurred。
其他必填项:
-
端口:Oracle 监听端口,默认1521;若改过(如1522),要和lsnrctl status输出一致 -
服务名/SID:必须与tnsnames.ora或数据库实际注册的服务名完全匹配(区分大小写),常见错误是把ORCL写成orcl或orclpdb -
用户名和密码:Oracle 数据库账号,和 SSH 用户无关
连接失败时先查这三处日志
如果点击 测试连接 失败,不要反复重试,直接看错误源头:
- Navicat 弹窗提示
Connection refused或Connection timed out→ 检查 SSH 参数是否正确,再确认远程服务器sshd是否运行(systemctl status sshd) - 提示
ORA-12541: TNS:no listener→ 登录服务器执行lsnrctl status,确认监听器已启动且监听127.0.0.1:1521(不是0.0.0.0:1521或某块网卡 IP) - 提示
ORA-12154: TNS:could not resolve the connect identifier→ 不是网络问题,是服务名填错,或服务器上tnsnames.ora未配置该服务别名
Oracle 使用 SSH 隧道的性能与兼容性注意点
SSH 隧道本身不改变 Oracle 协议,但会引入额外延迟和加密开销:
- 首次连接建立耗时比直连多 300–800ms,高频短连接场景(如脚本轮询)建议复用连接
- Navicat for Oracle 16+ 支持 TLS 加密隧道(需服务器启用
SSL),但 SSH 隧道和 Oracle TLS 是两层独立加密,无需也不建议叠加 - 某些托管环境(如 cPanel 共享主机)默认关闭
AllowTcpForwarding,即使 SSH 登录成功,ssh -L也会失败 —— 必须让运维在/etc/ssh/sshd_config中显式设为yes并重启sshd
最常被忽略的是 Oracle 监听地址绑定方式:很多 DBA 为“安全”把 listener.ora 中的 HOST 设为具体内网 IP,导致 SSH 隧道进来后无法路由到监听器 —— 必须确保它响应 127.0.0.1。











