核心是本地端口转发(-L),通过ssh -L 3307:192.168.1.20:3306 user@203.101.55.88建立加密隧道,Navicat中SSH填跳板机信息、MySQL主机填127.0.0.1,SpringBoot需配置jdbc:mysql://127.0.0.1:3307并引入JSch。

直接用 SSH 隧道访问内网数据库,核心是把数据库流量“套进”SSH 加密通道里——不暴露真实端口,也不依赖开放公网防火墙。关键不是连上就行,而是连得对、传得密、管得住。
明确你用哪一类端口转发
SSH 隧道有三种常见模式,选错就白配:
- 本地端口转发(-L):最常用。你在本地开一个端口(比如 3307),所有发给它的请求,都会经 SSH 跳板机,转发到内网数据库的 3306。适合 Navicat、SpringBoot 应用等主动连接场景。
- 远程端口转发(-R):跳板机开一个端口(比如 3307),外部访问它,流量反向穿过 SSH 隧道送到你本机起的服务。适合你本地跑着开发版 MySQL,想让测试同事临时连——但不适用于常规数据库访问。
- 动态端口转发(-D):在本地起一个 SOCKS5 代理(如 1080 端口),浏览器或支持代理的工具配置后,所有流量走 SSH 加密通道。适合需要绕过网络限制查资料,但对数据库直连支持弱,一般不用来连 MySQL。
Navicat 这类图形工具怎么填参数
很多人连不上,90% 卡在“主机名”填错。记住两组地址必须分开:
- SSH 部分:填跳板机的公网 IP / 域名、22 端口、系统用户名(如 ubuntu 或 root)、认证方式(密码或私钥文件)。
- MySQL 部分:主机名必须填 127.0.0.1 或 localhost(不是跳板机 IP!也不是数据库内网 IP!),端口填数据库实际监听端口(如 3306),用户名和密码是数据库账号,不是系统账号。
命令行手动建隧道(Linux/macOS/WSL)
比图形界面更透明,也方便脚本化。例如跳板机 IP 是 203.101.55.88,内网 MySQL 在 192.168.1.20:3306:
- 基础命令(前台运行,便于调试):
ssh -L 3307:192.168.1.20:3306 user@203.101.55.88 - 后台静默运行(生产环境推荐):
ssh -f -N -L 3307:192.168.1.20:3306 user@203.101.55.88,其中-f表示后台运行,-N表示不执行远程命令,纯做端口转发。 - 连通后,在本地用
mysql -h 127.0.0.1 -P 3307 -u dbuser -p即可访问,所有流量已自动加密。
SpringBoot 项目集成要点
不能只改数据库 URL,否则会绕过隧道。正确做法是:
- 先确保 SSH 隧道已建立(可用上面命令手动启,或用 JSch 在启动时自动建);
- 数据库 URL 写成:
jdbc:mysql://127.0.0.1:3307/your_db?useSSL=false&serverTimezone=UTC; - Maven 中引入 JSch 依赖(如 version 0.1.55),用于程序内自动建隧道(可选,非必需,但适合自动化部署)。

















