linux版navicat不支持ssh隧道,须用ssh -l端口转发;windows/macos版才支持图形化ssh选项卡,且常规页数据库主机必须填127.0.0.1而非真实内网ip,否则navicat将绕过隧道直连导致失败。

Linux 版 Navicat 不支持 SSH 隧道配置,必须用 ssh -L 做端口转发;Windows/macOS 版才支持图形化 SSH 选项卡,且数据库主机必须填 127.0.0.1,否则直连失败。
Navicat for Windows/macOS:SSH 选项卡填跳板机,常规页填 127.0.0.1
这是最常出错的一环:很多人在“常规”页仍填内网数据库真实 IP(比如 10.10.5.20),结果 Navicat 尝试绕过隧道直连,必然超时或拒绝连接。
- SSH 选项卡中:主机填跳板机公网 IP(如
jump.example.com),端口填22(或自定义 SSH 端口),用户名是跳板机系统账号(如oracle-admin),认证方式选密码或私钥(.ppk格式,OpenSSH 的id_rsa需用 PuTTYgen 转) - 常规选项卡中:主机名/IP 地址必须为
127.0.0.1(不是数据库 IP,也不是 localhost 别名),端口填 Oracle 在跳板机视角下可访问的端口——如果 Oracle 就装在跳板机上,填1521;如果 Oracle 在另一台内网机器10.10.5.20:1521,且你已在跳板机上配好ssh -L 1522:10.10.5.20:1521,那这里就填1522 - 用户名/密码是 Oracle 数据库账号(如
system),不是跳板机系统账号
Oracle 用户权限必须授权跳板机内网 IP,不是 % 或 localhost
Navicat 经 SSH 隧道发起的连接,对 Oracle 来说来源 IP 是跳板机的内网地址(比如 10.10.5.100),不是你本地电脑的任何 IP。哪怕你用 'user'@'%',某些 Oracle 安全策略(如 sqlnet.ora 中 SQLNET.ALLOWED_LOGON_VERSION_SERVER 或细粒度访问控制)也会拒绝。
- 登录跳板机,执行
tnsping ORCL或sqlplus / as sysdba确认 Oracle 实例可达 - 在 Oracle 中查授权:运行
SELECT username, profile FROM dba_users WHERE username = 'YOUR_USER';,再确认该用户被授予的网络访问权限是否匹配跳板机内网 IP - 若需显式授权,用
GRANT CONNECT, RESOURCE TO your_user;后,在listener.ora或通过DBMS_NETWORK_ACL_ADMIN包放开跳板机 IP 访问 - 检查
sqlnet.ora是否启用了tcp.validnode_checking = YES;若是,必须把跳板机内网 IP 加入tcp.invited_nodes
Linux 版 Navicat 只能靠 ssh -L 端口转发,且命令不能断
Linux 桌面版 Navicat(包括 Navicat Premium Linux)压根没有 SSH 选项卡,所有 SSH 配置字段都是摆设。强行填写、导入 Windows 配置、勾选“使用 SSH 隧道”均无效,启动时直接忽略。
- 先确保你能用
ssh oracle-admin@jump-server-ip登录跳板机(建议配好免密) - 执行端口映射:例如 Oracle 在内网
10.10.5.20:1521,运行ssh -L 1523:10.10.5.20:1521 oracle-admin@jump-server-ip -N -f(-f后台运行,-N不执行远程命令) - Navicat 新建 Oracle 连接时,“主机”填
localhost,“端口”填1523,其他按常规 Oracle 参数填(服务名/SID、用户名、密码) - 终端里用
ps aux | grep ssh确认转发进程仍在;关掉终端或 Ctrl+C 会中断隧道
连接卡住、报 “TNS-12535” 或 “ORA-12170”?优先查三层链路
这类错误几乎不来自 Navicat 配置本身,而是底层网络或 Oracle 监听未对齐。不要一上来调 Navicat 设置。
- 从跳板机执行:
telnet 10.10.5.20 1521(替换为目标 Oracle IP 和端口)——不通说明内网路由、防火墙或 Oracle 监听没开 - 检查跳板机的
listener.ora是否监听0.0.0.0:1521或至少绑定其内网 IP;lsnrctl status看服务是否注册成功 - 检查 Oracle 服务器防火墙:
sudo firewall-cmd --list-ports | grep 1521(CentOS)或sudo ufw status | grep 1521(Ubuntu) - 若跳板机也受云厂商安全组限制,确认其出方向(egress)允许到内网数据库 IP:1521
真正麻烦的从来不是 Navicat 怎么点,而是三处权限和策略要同时生效:跳板机 SSH 允许端口转发、Oracle 明确接受跳板机内网 IP、Navicat 的两个页面(SSH 和常规)参数语义不能混淆。漏掉任意一个,都会表现为“测试连接”转圈或秒退。











