Navicat通过SSH连接MariaDB需正确配置SSH主机为跳板机地址、数据库主机为127.0.0.1,同时确保MariaDB监听0.0.0.0、用户权限匹配跳板机IP,并用ssh-add加载带密码的私钥。
navicat 通过 ssh 连接 mariadb 不是“选配功能”,而是生产环境里最常用、最安全的连接方式——尤其当数据库服务器不暴露公网端口,或托管在云厂商内网(如腾讯云 vpc、aws ec2 私有子网)时,ssh 隧道几乎是唯一可行路径。
Navicat 的 SSH 配置项填什么?别填反了
很多人连不上,根本原因是把两个关键字段填颠倒了:
-
SSH 主机:必须填跳板机(或目标服务器本身)的公网 IP 或域名,比如jump-server.dealiaxy.com;不是填db.internal -
数据库主机:填127.0.0.1或localhost;因为从跳板机视角看,MariaDB 就在它本机或同网段,不需要再解析db.internal - 如果勾选了“使用远程主机名”,Navicat 会尝试让跳板机去解析
db.internal—— 这个选项只在跳板机 DNS 配置正确且你明确需要时才启用,多数情况关掉更稳
SSH 认证失败?先确认私钥和代理状态
Navicat 不支持交互式输入密钥密码,所以一旦私钥带密码短语(passphrase),就容易卡在认证环节:
- 用
ssh-add -l检查是否已加载私钥;没输出说明没加载 - 用
ssh-add ~/.ssh/id_rsa手动加载(会提示输一次 passphrase) - 如果私钥是
id_ed25519或其他名字,确保 Navicat 中“SSH 私钥文件”路径指向正确文件,且权限是600(chmod 600 ~/.ssh/id_*) - 测试命令行能否直连:
ssh -i ~/.ssh/id_rsa user@jump-server.dealiaxy.com,通了再进 Navicat
MariaDB 侧监听地址必须放开
SSH 隧道建好了,Navicat 还报 Connection refused?大概率是 MariaDB 只监听本地回环:
- 登录跳板机,执行
ss -tlnp | grep :3306,如果只看到127.0.0.1:3306,说明它拒绝所有外部连接 - 编辑
/etc/my.cnf.d/server.cnf,找到bind-address行,改成0.0.0.0或跳板机内网 IP(如10.10.2.5) - 重启 MariaDB:
sudo systemctl restart mariadb - 确认用户权限允许从跳板机 IP 登录:
SELECT host, user FROM mysql.user WHERE user = 'dbuser';,若 host 是localhost,得用GRANT ... ON *.* TO 'dbuser'@'10.10.2.5'重授权
Navicat 测试连接失败?先绕过 GUI 直接验证隧道
GUI 报错信息模糊,不如用最简命令快速定位问题:
- 手动建隧道:
ssh -L 3307:127.0.0.1:3306 user@jump-server.dealiaxy.com(注意这里127.0.0.1:3306是跳板机视角下的 MariaDB 地址) - 新开终端,直接连:
mysql -h 127.0.0.1 -P 3307 -u dbuser -p - 如果命令行能连通,说明 Navicat 配置有误;如果命令行也失败,问题出在网络、权限或 MariaDB 监听配置上
- Navicat 的“测试连接”按钮本质就是做同样动作,但它不显示底层 SSH 日志,所以别依赖它排错
最容易被忽略的是 MariaDB 的 bind-address 和用户 host 权限——这两处配置都在服务器端,和 Navicat 本身无关,但只要漏掉一个,SSH 隧道再漂亮也没用。


















