本地通过阿里云ECS建立SSH隧道连接阿里云RDS MYSQL数据库

背景介绍

本来阿里云RDS数据库是可以通过互联网连接的,不过为了数据安全,一般不让直接连数据库。

另一方面,由于网络环境的一些原因,如果直接连阿里云数据库,容易被网络安全软件认为存在数据传输,视为风险项。

实现思路

本地电脑---(建立ssh隧道)--->ECS服务器---(转发请求)--->RDS数据库

组件 说明
本地电脑 你的开发机(Mac/Windows/Linux)
ECS 实例 阿里云 ECS,与 RDS 在同一 VPC,能访问 RDS
RDS MySQL 内网地址如 rm-xxxxxx.mysql.rds.aliyuncs.com:3306
连接方式 使用 .pem 私钥文件登录 ECS,建立 SSH 隧道
目标 本地通过 127.0.0.1:3307 安全连接 RDS MySQL

实现步骤

第一步:确认前提条件

1.在ECS上可以访问RDS数据库,在ECS上执行命令:

bash 复制代码
telnet rm-xxxxxx.mysql.rds.aliyuncs.com 3306

检查ECS是否能够连接到RDS(RDS需要配置IP白名单)。

2.本地连ECS有密码和证书文件两种方式,为了安全,推荐使用证书方式。

要连接ECS,需要配置ECS秘钥对,可以参考通过SSH密钥对登录Linux实例_云服务器 ECS(ECS)-阿里云帮助中心

假设得到ECS证书:aliyun-key.pem

注意:在 Windows 上,新创建或下载的文件可能默认权限较宽松(例如 Everyone 可读),SSH 会认为不安全,拒绝使用该私钥

需要 修改 .pem 文件的权限,只允许当前用户访问。

(1)选中aliyun-key.pem文件,右键 → 属性 → 安全 → 高级

(2)点击 "禁用继承" → 选择 "将继承的权限转换为此对象的显式权限"

(3)点击 "删除" 按钮,移除所有用户/组(除了你自己的用户)

(4)点击 "添加" → "选择主体" → 输入你的用户名 (如 DESKTOP-XXXXX\user

(5)设置权限:

类型:允许

权限:读取(或"读取和执行")

(6)确保 只有你自己的用户有权限 ,其他用户(如 Everyone、SYSTEM 等)都删除或拒绝

(7)点击 确定 保存。

第二步:建立 SSH 隧道(本地 → ECS → RDS)

在你的 本地终端 执行以下命令:

bash 复制代码
ssh -i E:\***\aliyun-key.pem -L 3307:rm-******.mysql.rds.aliyuncs.com:3306 root@<ECS_IP> -p 22 -N -f

参数说明:

参数 作用
-i /aliyun-key.pem 指定私钥文件
-L 3307:rm-xxxxxx...:3306 将本地 3307 端口转发到 RDS
root@<ECS公网IP> ECS 的登录用户和公网 IP
-p 22 SSH 端口(默认 22)
-N 不执行远程命令(仅端口转发)
-f 后台运行

执行后无输出即表示成功(后台运行)

第三步:本地连接 RDS MySQL

隧道建立后,你可以通过本地端口 3307 访问 RDS。

用图形化工具连接MySQL即可。

第四步:关闭 SSH 隧道

方法一:使用 任务管理器(最简单,推荐)

快捷键:Ctrl + Shift + Esc 打开 任务管理器

切换到 "详细信息" 选项卡(如果是简体模式,可能叫"进程")

在列表中找到:

ssh.exe 或 OpenSSH.Ssh.exe

或你在 Git Bash/WSL 中运行的终端进程(如 bash.exe)

右键点击该进程 → 选择 "结束任务"。

方法二:使用 命令行(PowerShell) 查找并关闭

  1. 打开 PowerShell(以普通用户运行即可)

  2. 查找占用本地端口 3307 的进程,记下最后的 PID(如 12345)

  3. 根据 PID 查找进程名称:Get-Process -Id 12345,输出可能显示 sshbash 等。

4.结束进程:Stop-Process -Id 12345 -Force 或直接用 taskkill /PID 12345 /F