如何在Mac版Navicat中配置SSH隧道以访问远程Linux数据库?

梦明酱_6260

梦明酱_6260

2026-06-09

374人浏览

原创

ssh用户名填的是服务器操作系统账户而非mysql账号,因ssh隧道建立的是系统级连接;常规页的用户名才是mysql数据库账号,填反会导致连接失败。

mac版navicat填ssh用户名时,为什么不能填mysql账号

因为ssh隧道建立的是系统级连接,不是数据库连接。你在ssh选项卡里填的username,是跳板机(或目标服务器)的操作系统账户,比如ubuntu、centos或root;而常规页里的username才是mysql的数据库账号。填反了是连不上最常见原因。

尤其云服务器(如阿里云ECS、腾讯云CVM)默认SSH登录用户通常不是root,而是ubuntu(Ubuntu)或centos(CentOS 7+),得先在服务器上执行whoami确认真实用户名。

私钥认证下,username必须和私钥对应账户一致,否则SSH直接拒绝登录——例如用deploy用户生成的id_rsa,就不能在SSH页填ubuntu。

Mac版Navicat的私钥路径和格式怎么填才不报“无法加载密钥”

macOS版Navicat支持OpenSSH原生id_rsa格式,但对路径极其敏感:

  • 不能用~符号(如~/keys/id_rsa会失败)
  • 路径中不能含空格、中文、特殊符号(如/Users/张三/.ssh/id_rsa或/Users/me/My Keys/id_rsa都会加载失败)
  • 文件权限需为600(chmod 600 /path/to/id_rsa),否则OpenSSH底层拒绝读取
  • 推荐路径:/Users/you/.ssh/jump_id_rsa 或 /Users/you/navicat-keys/mysql-tunnel.key

填完后点测试连接,若提示“Key is invalid or corrupted”,大概率是路径错或权限松;若提示“Permission denied (publickey)”,则用户名与私钥不匹配,或服务器端sshd_config里PubkeyAuthentication yes未启用。

常规页主机为什么必须填127.0.0.1而不是localhost或内网IP

这是SSH隧道能通的核心逻辑点。localhost在MySQL客户端行为中会强制走Unix socket文件(如/tmp/mysql.sock),完全绕过TCP协议;而SSH隧道只转发TCP流量。填127.0.0.1才能确保Navicat发起的是TCP连接,流量才会被隧道捕获并转发到远端。

Linux Ai Server
Linux Ai Server

Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。

下载

常见错误现象:

  • 填localhost → 报错Can't connect to local MySQL server through socket '/tmp/mysql.sock'
  • 填跳板机内网IP(如10.10.5.20)→ Navicat直连该IP,不走隧道 → 被防火墙拦截或连接拒绝
  • 填127.0.0.1 + 正确端口 → 流量进本地端口 → SSH隧道自动转发 → 成功抵达目标MySQL

注意:即使MySQL实际运行在另一台内网机器(比如10.10.5.20:3306),只要跳板机能访问它,你就在SSH页填跳板机信息,常规页仍填127.0.0.1 + 对应端口(例如跳板机上执行了ssh -L 3307:10.10.5.20:3306 user@jump,那常规页端口就填3307)。

Mac版Navicat连上SSH但进不了库,报Access denied for user怎么办

这类错误90%不是Navicat配置问题,而是MySQL服务端权限没开对。关键点在于:MySQL用户授权的host字段,必须匹配“经由SSH隧道到达时的实际来源IP”。

由于隧道把你的请求转成了跳板机本机发出的连接,MySQL看到的客户端IP是127.0.0.1(或跳板机内网IP),不是你的本地公网IP。所以你要这样授权:

  • 如果MySQL和跳板机在同一台机器上:执行CREATE USER 'dbuser'@'127.0.0.1' IDENTIFIED BY 'pass'; GRANT ALL ON mydb.* TO 'dbuser'@'127.0.0.1';
  • 如果MySQL在另一台内网机器(如10.10.5.20),且跳板机用10.10.5.10连它:授权对象就得是'dbuser'@'10.10.5.10'
  • 绝对不要只授权'dbuser'@'%'就以为万事大吉——很多MySQL安装默认禁用skip-name-resolve,导致%匹配失败;而且%不包含127.0.0.1,这是两个独立host值

执行完授权别忘了FLUSH PRIVILEGES;。再测试连接,基本就能过了。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2233

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1359

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

795

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3072

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5188

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1159

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5451

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

4782

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6334

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习