Navicat SSH连接失败主因是私钥路径、权限、用户名及数据库主机配置错误:路径须为绝对路径且无空格中文;权限必须600;SSH用户名需与密钥归属用户一致;数据库主机须填127.0.0.1而非localhost。

Mac 和 Linux 版 Navicat 原生支持 OpenSSH 格式私钥(如 id_rsa),但路径、权限、用户名匹配这三点不满足,连接必失败——不是报“Key is invalid”,就是“Permission denied (publickey)”。
私钥路径必须用绝对路径,且不能含空格或中文
Navicat 不解析 ~ 符号,也不处理带空格的路径。比如 ~/keys/id_rsa 或 /Users/张三/.ssh/id_rsa 会直接加载失败。
- ✅ 正确写法:
/Users/you/.ssh/jump_id_rsa或/home/user/.ssh/db-tunnel.key - ❌ 错误写法:
~/.ssh/id_rsa、/home/user/My Keys/id_rsa、/Users/李四/.ssh/id_rsa - 建议把密钥统一放到
.ssh子目录下,避免迁移时反复改路径
私钥文件权限必须是 600
OpenSSH 底层强制校验私钥权限,Navicat 调用系统 ssh 组件时会继承该行为。权限过宽(如 644)会导致“无法加载密钥”或静默失败。
- 执行命令修复:
chmod 600 /path/to/id_rsa - Linux/macOS 都适用;Windows 上无此限制,但跨平台迁移时别漏掉这步
- 如果用
ssh-keygen -t rsa -b 4096新生成,默认就是 600,无需额外操作
SSH 用户名必须和私钥归属账户一致
私钥不是通用凭证,它绑定的是生成时的用户身份。填错用户名(比如用 deploy 密钥却填 ubuntu)会导致服务端直接拒绝,报 Permission denied (publickey)。
- 确认方式:在终端运行
ssh -i /path/to/id_rsa username@host,能连上才算匹配 - 常见陷阱:跳板机上用的是
root,但密钥是用普通用户生成的 → 必须重生成或换密钥 - 服务器端需确保
/etc/ssh/sshd_config中PubkeyAuthentication yes已启用
数据库连接页的主机必须填 127.0.0.1,不是 localhost
这是 SSH 隧道场景下最容易忽略的点。localhost 在 MySQL 客户端逻辑里会走 Unix socket,绕过 TCP 层,而隧道只转发 TCP 流量。
- ✅ 填
127.0.0.1:强制走 TCP,流量经隧道抵达跳板机内部网络 - ❌ 填
localhost或留空:连接失败,错误可能是Can't connect to local MySQL server或超时 - 端口填跳板机上数据库监听的实际端口(如 3306),不是 SSH 端口
实际配置中,路径、权限、用户名、主机这四个点只要一个没对齐,就会卡在不同阶段的报错里。建议每次修改后点一下 Save 再 Test Connection,否则 Navicat 可能读取旧缓存值。











