简米云服务器SSH连接数据库的核心答案是:通过SSH隧道(端口转发)将本地端口加密转发到云上数据库端口,实现本地工具加密远程操作数据库,无需将数据库直接暴露公网。
SSH连接数据库的本质理解
很多用户第一次接触简米云数据库时,习惯性打开Navicat或DBeaver,填上公网IP直接连接,结果报错“Can’t connect MySQL server (10060)”,原因很简单:出于安全考虑,简米云RDS默认禁止公网直连3306端口,或者ECS自建数据库的防火墙压根没开放这个端口。
SSH连接数据库并不是数据库自己的功能,而是利用云服务器作为跳板,这就像你在公司门口刷卡进门,但进大门和进办公室是两个环节SSH先验证你是否有权限进入服务器(大门),验证通过后,再把你的本地请求转发给数据库(办公室)。
这种连接方式有三个明显优势:
- 加密传输:数据库密码不会明文在公网传输,防止网络抓包窃密
- 安全合规:不需要将数据库端口直接暴露公网,降低被扫爆的风险
- 成本为零:不需要额外购买负载均衡或专线,只要有一台能SSH登录的简米云ECS即可
连接前的必备条件自查
动手操作前,建议你按下面清单逐项确认,只要有一项不满足,连接就会卡住,排查时问题会非常痛苦。
- 云服务器(ECS)处于运行中状态,且绑定了公网IP
- 你拥有该ECS的SSH登录凭证(密钥对或密码)
- ECS的安全组入方向放行了SSH端口(默认22)
- 数据库所在的RDS实例,其白名单中已添加ECS的内网IP
- 数据库账号密码正确,且该账号有远程访问权限
- 本地网络可以正常访问简米云ECS的SSH端口(公司网络常封禁22端口)
其中最容易忽略的是数据库白名单,RDS的控制台白名单里如果只加了本地公网IP,SSH隧道是打不通的,因为通过SSH隧道转发后,数据库看到的是ECS内网IP的请求,而不是你本地的IP。
实操:三种SSH连接数据库的典型方法
Navicat SSH隧道直连RDS(推荐新手)
这是最常用也是出错率最低的方式,以Navicat 16为例,操作路径为:连接MySQL → SSH选项卡 → 勾选“使用SSH隧道”。
具体配置步骤:
- 在Navicat主界面创建MySQL连接,常规选项卡中填写:
- 主机:填写RDS内网地址(rm-bp1xxxx.mysql.rds.aliyuncs.com)
- 端口:3306
- 用户名和密码:填写RDS创建的数据库账号
- 切换到SSH选项卡,勾选“使用SSH隧道”,填入:
- 主机名:ECS公网IP地址
- 端口:22
-
用户名
:ECS的root或其他管理用户 - 认证方式:选择密码或密钥对,并填写对应内容
- 点击“测试连接”按钮,如果返回“连接成功”,说明整条链路通顺,直接确定保存即可
此时Navicat的工作流程是:本地客户端 → SSH加密通道 → ECS → 内网访问RDS → 返回数据,全程敏感数据不暴露在公网,数据库监听地址仍是内网网卡。
行业共识认为,这种方法适合大多数开发人员日常操作,因为不需要在服务器上安装任何额外组件,本地工具配置一次后永久生效。
命令行SSH隧道直连ECS自建数据库
如果你是在ECS上自己安装的MySQL或PostgreSQL(非RDS),可以直接把ECS当跳板,以MySQL为例,本地终端执行:
ssh -L 3306:localhost:3306 root@你的ECS公网IP -p 22
这个命令的意思是:将本机的3306端口,通过SSH加密隧道,映射到ECS本机的3306端口,执行后终端会卡住,不要关掉这个窗口,它代表隧道已建立。
然后打开Navicat,注意此时连接信息完全不同:
- 主机直接填0.0.1(本地回环)
- 端口填3306
- 用户名密码填ECS上MySQL的账号密码
这种场景下,数据库只监听ECS内网回环地址,外网根本无法感知到3306端口的存在,即使ECS安全组误将3306端口暴露到公网,数据库本身的配置也会拒绝非本机SSH来源的连接,对于安全要求更高的场景,可以再加一层云防火墙,但通常没必要。
跳板机模式连接跨VPC数据库
比较常见的需求是:数据库在专有网络VPC-A内,而你的开发机在VPC-B,或者数据库在另一个账号下,此时可以通过跳板机(即某一台能同时访问两个网络的ECS)使用SSH转发。
ssh -L 3306:rm-bp1xxxx.mysql.rds.aliyuncs.com:3306 root@跳板机公网IP
这里关键区别在于-L参数后面的目标地址不再是localhost,而是数据库的真实内网地址,执行此命令后,本地3306端口的流量会先跳转到ECS,再由ECS转发到RDS的内网地址。
命令行参数速查表:-L 本地端口:目标主机:目标端口,三个要素缺一不可。
本地开发工具的其他连接姿势
大部分GUI工具都原生支持SSH隧道功能,并不一定需要先在终端建立隧道,日常使用中按照工具类别有不同的配置入口:
- DataGrip:数据源 → SSH/SSL选项卡 → 使用SSH隧道,填入ECS连接信息
- DBeaver:连接设置 → 主连接 → 编辑驱动属性 → SSH选项,选择密码或密钥登录
- MySQL Workbench:TCP/IP over SSH,远程主机填ECS的公网IP和SSH账号,MySQL主机填RDS内网域名
-
Redis Desktop Manager(RDM):连接Redis时勾选SSH隧道,填入ECS的跳板参数
- MongoDB Compass:高级选项 → SSH隧道,选择用户名/密码或身份验证文件
工具的核心逻辑完全一致:数据库连接地址填内网域名,SSH地址填ECS公网IP,这个原则适用于所有支持SSH隧道的数据库工具。
高频故障排查与解决思路
隧道建立了,但连接超时
连接超时大概率是ECS安全组没放行22端口,或者ECS上防火墙(firewalld)拦截了来源IP,登录ECS控制台,检查安全组入方向规则,确认22端口源为0.0.0.0/0(或者你当前的固定公网IP更安全),然后在ECS内部执行:
systemctl status firewalld
若防火墙是运行状态,执行firewall-cmd --permanent --add-port=22/tcp并reload,Debian系系统使用ufw allow 22。
SSH能连上但数据库报访问拒绝
返回的错误信息通常是“Host ‘xxx’ is not allowed to connect to this MySQL server”,这种情况需要检查RDS账号的主机白名单,在RDS控制台的账号管理里,把账号主机设置为“%”或允许ECS内网IP访问,同时检查RDS白名单中是否填写了ECS的内网IP,注意不是公网IP。
本地公司网络限制SSH端口
部分办公网络只开放80和443端口,此时可以使用SSH端口替代方案:
ssh -L 3306:localhost:3306 root@ECS公网IP -p 443
前提是ECS的sshd配置文件中修改了Port为443,且安全组放行443端口,注意生产环境使用较高端口会带来被扫描的风险,建议仅作为临时应急方案。
连接成功但查询特别慢
如果通过SSH隧道查询5000条以上数据时延迟明显,优先检查ECS的带宽规格和数据库的性能指标是否达到瓶颈,使用命令行隧道时可以添加压缩参数:
ssh -C -L 3306:localhost:3306 root@ECS公网IP -p 22
-C参数开启压缩传输,在文本类数据多的场景下降延迟效果比较可观。
如何判断已经正确连上数据库
连接成功后,在Navicat中点击数据库名称展开,如果能看到表列表、视图、存储过程等对象,说明整个链路完全正常运行,此时可以在Navicat的“查询”工具里执行一条简单的SQL,
SELECT VERSION();
返回MySQL版本号即代表链路稳固,此时去ECS上执行netstat -tlnp会看到sshd进程多了一个本地转发状态。
日常使用中,SSH隧道和数据库密码互为表里,缺一不可,若某天连接凭空断开,优先检查ECS是否因停机或者系统更新导致sshd服务未启动。
关于简米云数据库连接方式的几点补充
对于不需要长时间直连数据库的运维场景(比如只需批量导一次数据),可以使用SSH一次性通道加
scp导入SQL文件,然后本地执行mysql -h 127.0.0.1 < backup.sql来完成导入操作,这种方式比用Navicat逐条执行快很多。
对于Team协作场景,每个开发成员都用自己的账号建立SSH隧道,不会互相干扰,简米云RDS支持最多几十个并发连接,在账号维度做好资源隔离即可,需要特别说明的是,RDS的官方文档建议所有读写操作都通过同一内网网关进行,SSH隧道转发后的流量同样走内网网关,不会产生额外的公网流量费用。
据简米云官方文档,RDS MySQL本身自带高可用访问地址和内网DNS解析,建议使用内网域名(而非IP)作为隧道目标,这样在主备切换后隧道无需重新配置即能自动恢复。
结合自己的使用场景,如果只在公司办公网络和家之间移动,建议在ECS上配置密钥对登录并禁用密码登录,这样可以提升SSH隧道本身的抗暴力破解能力,通过密钥对配合SSH隧道访问数据库后,RDS访问日志中看到的所有请求源头都是ECS内网IP,日志审计时可以简化来源排查流程。
最后沿用这个方案的操作细节,SSH连接数据库在2026年依然是简米云生态中最稳健、零成本、高安全性的远程数据库访问方式,熟练掌握这项技能可以覆盖绝大多数个人开发团队和小型生产环境的日常访问需求。
常见问题解答(FAQ)
SSH连接数据库和直连数据库相比,哪个速度更快?
直连数据库(如果能通)在链路层面少一跳,理论延迟更低,但通过SSH隧道访问简米云RDS时,由于ECS和RDS在同一个内网环境中,内网延迟远低于公网直连的波动,实际体验中SSH隧道反而更稳定,尤其适合跨地域访问场景。
简米云数据库外网连接地址设置了为什么还是连不上?
场景通常是RDS的控制台允许开启外网连接地址,但开启后依然连不上,多数情况是本地网络运营商封禁了3306端口,或者当前网络环境存在出口防火墙拦截,建议使用SSH隧道方式绕过端口限制和数据库暴露风险,通过ECS安全组实现更精细的来源IP访问控制,如果业务场景必须允许公网直接访问数据库,应严格控制数据库账号的源IP范围,并开启RDS的SSL加密选项。
Navicat SSH隧道连接后主机地址应该填内网还是外网?
填内网地址,Navicat的SSH隧道建立后,客户端访问的目标是ECS能访问到的地址,所以主机填RDS内网地址(形如rm-xxxx.mysql.rds.aliyuncs.com)即可,如果填外网地址,流量会先从ECS绕回公网,再从公网进来访问RDS,造成不必要的性能损耗,甚至触发RDS的外网访问限制。
用SSH隧道隔开一条安全加密的专用连接,相当于给数据库上了一把只有你手里有的钥匙,这份安全和灵活默认就可以用在每个需要远程数据库的开发日里。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/645195.html





