SSH 隧道(最安全,推荐)
这种方法通过在本地和服务器之间建立一个加密的 SSH 通道来传输 MySQL 数据,不需要开放 MySQL 的 3306 端口,最安全。
1. 建立 SSH 隧道
在本地终端执行命令:
Windows (PowerShell):
powershell
ssh -N -L 13306:127.0.0.1:3306 ubuntu@你的服务器IP
macOS/Linux:
bash
ssh -N -L 13306:127.0.0.1:3306 ubuntu@你的服务器IP
参数说明:
-N:不执行远程命令,只做端口转发-L 13306:127.0.0.1:3306:将本地的 13306 端口转发到服务器的 3306 端口ubuntu@你的服务器IP:服务器的 SSH 登录用户和 IP
执行后,会提示输入登陆用户的密码,输入完成后终端会卡住不动(这是正常现象,表示隧道正在运行 ),不要关闭这个窗口。
2. 本地连接 MySQL
Navicat/DBeaver/DataGrip 配置:
| 配置项 | 值 |
|---|---|
| 主机 | 127.0.0.1 或 localhost |
| 端口 | 13306 |
| 用户名 | MySQL 用户名(如 root) |
| 密码 | MySQL 密码 |
3. 后台运行隧道(可选)
如果不想一直开着终端窗口(关闭弹出窗口无影响):
bash
# 添加 -f 参数,后台运行
ssh -f -N -L 13306:127.0.0.1:3306 ubuntu@你的服务器IP
4. 自动重连脚本(PowerShell)
-
脚本名称:ssh-tunnel.ps1
powershellwhile ($true) { ssh -N -L 13306:127.0.0.1:3306 ubuntu@你的服务器IP Write-Host "隧道断开,5秒后重连..." -ForegroundColor Yellow Start-Sleep -Seconds 5 } -
设置为开机自启动的计划任务,之后每次登录 Windows,它都会自动拉起隧道。SSH 断了也会 5 秒后重连。
bashschtasks /Create /TN "mysql-ssh-tunnel" /SC ONLOGON /TR "powershell.exe -ExecutionPolicy Bypass -File D:\你的真实脚本路径\ssh-tunnel.ps1" /F -
重点! 此时脚本每次启动还是需要手动输入服务器登录密码的,下面设置免密登录!
-
1️⃣ 在本地生成 SSH 密钥对(如果还没有)
bash# 在 PowerShell 中执行 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 一路按回车,使用默认路径和空密码 -
2️⃣ 将公钥复制到服务器
bash# 手动复制(PowerShell),需要输入一次服务器登录密码 type $env:USERPROFILE\.ssh\id_rsa.pub | ssh ubuntu@你的服务器IP"cat >> ~/.ssh/authorized_keys" -
3️⃣ 重启定时任务脚本即可不输入密码
-
感谢关注【遇事不決洛必達】!欢迎点赞收藏和交流指正,我会持续分享我的学习经验和心得。