本地通过阿里云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上执行命令:
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)
在你的 本地终端 执行以下命令:
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,输出可能显示 ssh
或 bash
等。
4.结束进程:Stop-Process -Id 12345 -Force 或直接用 taskkill /PID 12345 /F