本地连不上127.0.0.1:3307主因是ssh隧道未通或目标地址错误:①ssh命令中-l 3307:127.0.0.1:3306应指向跳板机能访问的mysql真实内网ip(如192.168.1.100),而非其localhost;②mysql需授权对应用户从该ip访问且host字段非仅localhost;③mysql配置中bind-address不能为127.0.0.1,须注释或改为0.0.0.0并重启服务。

直接暴露 3306 端口到公网等于给攻击者留了后门,SSH隧道是目前最轻量、最可靠、无需改数据库配置的安全方案——它不依赖 MySQL 的 SSL,也不要求开放数据库端口,只靠已有的 SSH 通道加密转发流量。
为什么本地连不上 127.0.0.1:3307?检查这三处
这是最常卡住的环节,不是 Navicat 配错了,而是底层隧道没通或连错目标:
- SSH 命令里写的
127.0.0.1:3306是指「远程服务器自己 localhost 上的 MySQL」,不是你本地的;如果 MySQL 实际监听的是内网 IP(比如192.168.1.100:3306),就得把命令改成ssh -L 3307:192.168.1.100:3306 user@remote_host - 远程 MySQL 必须允许该地址访问:登录服务器执行
mysql -u root -p -e "SELECT host,user FROM mysql.user;",确认对应用户的host字段不是localhost(得是%或具体 IP) - MySQL 配置文件(
/etc/mysql/my.cnf或/etc/my.cnf)里不能有bind-address = 127.0.0.1—— 这条会强制只监听本地,得注释掉或改成0.0.0.0(重启 mysqld 生效)
Navicat 隧道配置时,“主机名”填 localhost 还是远程 IP?
必须填 localhost 或 127.0.0.1,填远程公网 IP 是典型错误。
原因很简单:SSH 隧道已经把你“送进”了远程服务器内部网络,此时 Navicat 认为它就在那台机器上。所以:
- SSH 选项卡里填跳板机信息(IP、端口、用户、密钥/密码)
- 常规选项卡里的“主机名/IP 地址”必须是
localhost—— 表示连接本机(即跳板机)上的 MySQL - 端口填 MySQL 实际监听的端口(通常是
3306),不是你本地映射的端口(比如3307)
用密钥登录比密码更稳,但私钥权限不对会静默失败
Windows 下私钥路径含中文或空格、Linux/macOS 下私钥文件权限太宽松(比如 644),都会导致 Navicat 显示“Authentication failed”,却不提示具体原因。
实操建议:
- Windows:私钥用 OpenSSH 格式(
id_rsa),不是 PuTTY 的.ppk;若只有 .ppk,用 PuTTYgen 转换并保存为 OpenSSH 格式 - macOS/Linux:运行
chmod 600 /path/to/id_rsa,确保只有当前用户可读写 - Navicat for Mac 若选不了私钥文件,先关掉应用,用 Finder 右键 → “显示简介” → “共享与权限” 把私钥文件权限设为“只读”给当前用户
真正容易被忽略的点是:SSH 隧道建立后,Navicat 并不自动重连断开的隧道。一旦服务器重启、网络抖动或 SSH 连接超时,Navicat 会卡在“正在连接…”状态,此时必须手动右键连接 → “断开连接”,再双击重连——它会重新触发 SSH 握手。别等,也别反复点测试连接。











