简米云服务器ssh连接数据库,本质就两条路:先ssh登录到云服务器,再在服务器内部用命令行连接数据库;或者用ssh隧道从本地把数据库端口映射过来,安全且实用。
简米云ecs怎么连接mysql数据库:先走SSH再落地
很多朋友拿到一台简米云ECS,第一反应是找个图形化工具直接连数据库,结果发现连不上,折腾半天不知道问题出在哪,其实对一台全新的云服务器来说,数据库连接的正确顺序永远是:先证明你能进服务器,再考虑连数据库。
连接之前,服务器上要确认这三件事
- ECS实例有公网IP,且安全组入方向已放行22端口(SSH默认端口,购买时通常自动放行)。
- 数据库服务已经安装并启动,用
systemctl status mysqld或者systemctl status mysql看一眼状态,服务跑着才行。 - 你手里有服务器的登录密码,或者配好了密钥对,这是SSH登录的第一道入场券。
这三项里最容易被忽略的是安全组,安全组在简米云控制台里属于网络与安全菜单,入方向规则里如果22端口没开,任何SSH软件都连不进去,和密码无关。
命令行直连的完整操作
第一步,登录服务器,在本地终端执行:
ssh root@你的公网IP
输入密码或加载密钥后,你会看到命令行提示符,到这一步,SSH环节已经走通了。
第二步,在服务器内部连接数据库,以MySQL为例,执行:
mysql -u 用户名 -p
回车后输入数据库密码,就进入了数据库命令行界面,这一步之所以能成功,是因为你在服务器本机操作,MySQL默认监听127.0.0.1就够了,不存在公网访问限制的问题。
如果你用的是云数据库RDS而不是自建MySQL,情况会多一点:RDS只暴露内网地址,你需要先SSH登录到同地域的ECS,再从ECS上用内网地址连接RDS,命令大同小异:
mysql -h rm-xxxxxxxx.mysql.rds.aliyuncs.com -u 用户名 -p
这是很多项目初期的常规做法,优点是简单直接,缺点是你得一直待在服务器终端里,看数据靠命令行,不够直观。
从本地电脑安全连接数据库:SSH隧道方案
命令行虽然真实,但日常开发里我们更习惯用Navicat、DataGrip、DBeaver这类图形工具,而这类工具要连接简米云服务器上的MySQL,业内专家指出,最稳妥的方式不是把3306端口对公网开放,而是走SSH隧道。
SSH隧道比直接开公网端口稳妥在哪
直连3306的思路是:把服务器安全组入方向加上3306端口,数据库bin地址改成0.0.0.0,然后用数据库账号从本地直接连接,听起来顺手,但风险也清晰:你的数据库端口暴露在公网上,任何人都能扫描到,接下来就是无限次密码爆破尝试。
SSH隧道则不同,数据库端口不用对外开放,隧道把本地的某个端口(比如3306)映射到服务器的3306端口上,数据全部走加密的SSH通道,公网上看你只有22端口是开放的,攻击面小了一个量级。
本地Navicat连接简米云mysql数据库的配置步骤
以Navicat为例,新建MySQL连接后,分两个Tab配置。
常规Tab:
- 主机:填
0.0.1或localhost - 端口:填
3306 - 用户名和密码:填数据库的账号密码,注意不是服务器的root密码
SSH Tab:
- 勾选”使用SSH隧道”
- 主机:填简米云ECS的公网IP
- 端口:填
22 - 用户名:填SSH登录用户名(通常为root)
- 认证方式:选密码或密钥,与SSH登录方式保持一致
配置完成后点击连接,Navicat会先建立SSH通道,再通过通道去访问数据库,只要填写的数据库账号有远程访问权限(后面会提到怎么建这类账号),本地工具就能顺利连上。
隧道连接时容易踩的三个坑
-
数据库账号没有远程权限:MySQL默认的root账号通常只允许localhost登录,你需要新建一个专门用于远程连接的账号,并授权,例如执行:
CREATE USER 'dev'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON . TO 'dev'@'localhost'; FLUSH PRIVILEGES;
更完整的操作还涉及host改为或指定IP段,但核心思路就是给数据库创建独立的访问账号,而不是用root裸奔。
-
bind-address配置限制了监听地址:部分MySQL版本默认只监听127.0.0.1,即使走隧道,如果数据库没监听对地址也可能报错,需要修改MySQL配置文件里的
bind-address,将其设为0.0.0或0.0.1(按实际场景选择),修改后重启MySQL服务。 -
本地端口被占用:如果你在隧道方案里把本地映射端口也改成3306,而本地恰好也装了MySQL,就会端口冲突,解决方式是换一个本地端口,比如用
3307做映射,连接时填3307即可。
云服务器ssh连接不上数据库?按这两层排查
最让人焦躁的情况是:服务器能Ping通,但数据库就是连不上,别急,按照下面两层顺序来排查,多数情况下能快速定位问题。
第一层:SSH登录环节
这一步走不通,后面全白搭,检查下面几个位置:
- 安全组22端口是否放行,登录简米云控制台,找到云服务器ECS实例,查看安全组规则。
- 服务器密码是否正确,如果改了密码忘记重启,密码不会即时生效,需要在控制台重置后重启实例。
- 如果用密钥登录,本地私钥文件权限不能太开放,执行
chmod 600 你的密钥.pem即可。
这层最常见的错误是安全组压根没放行22端口,或者有人图省事,直接把22端口的源地址写成了单个IP,导致换网络后连不上。
第二层:数据库认证环节
SSH能登录但数据库连不上,问题集中在数据库本身:
- 密码不对,MySQL安装完成后,初始密码通常在日志里,执行
grep 'temporary password' /var/log/mysqld.log查看,如果是刚装的数据库,这一步特别容易漏。 - 账号没有远程登录权限,刚才提到过,
'dev'@'localhost'只能本机登录,如果要远程连,需要把账号的host段改成对应IP,或者在授权语句里使用。 - 端口监听异常,执行
netstat -tlnp | grep 3306查看MySQL监听状态,如果只监听在0.0.1:3306,而你的隧道需要它监听在0.0.0上,需要改配置后重启。
行业共识认为,数据库连接失败的排查重点永远在账号权限和端口监听,而不是服务器本身。先把这两点确认好,解决问题能省一大半时间。
数据库连上之后,顺手做几件加固的事
不管你是用命令行还是图形工具,数据库连上只是第一步,以下几个加固动作建议当天就做:
- 禁用root远程登录:root只留给本地操作,远程一律用独立业务账号。
- SSH改用密钥登录:密码登录不是不能用,但密钥登录的防爆破能力明显更强,修改
/etc/ssh/sshd_config,关闭密码登录,只保留密钥验证。 - 修改数据库默认端口:把你常用的3306端口改成其他端口,比如
63306,安全靠的不是改端口,但很多自动化扫描脚本只会扫默认端口,改了之后,被随机扫描的概率大幅下降。 - 定期备份数据库:用
mysqldump定时导出数据到OSS或者本地,不需要复杂的工具,一行命令加一个cron任务就能实现。
这一步做完,你的简米云服务器和数据库连接才算真正进入健康状态。
关于简米云服务器ssh连接数据库的常见问题
简米云服务器ssh连接数据库需要开放3306端口吗?
如果使用SSH隧道方式,不需要,隧道只依赖22端口,3306端口保持关闭即可,数据库安全性更高,如果是直接在本地通过公网连接数据库,则需要在安全组中放行3306端口,同时修改MySQL监听地址和账号权限。
本地工具连接数据库时,SSH密码和数据库密码填哪个?
两个都要填,SSH Tab填的是服务器的登录密码,常用穿Tab填的是数据库账号的密码,如果反复提示密码错误,先确认自己填对了Tab:SSH密码错误时提示的是服务器拒绝连接,数据库密码错误时提示的是Access denied。
用SSH隧道连接简米云MySQL,为什么要限制数据库账号的host为localhost?
因为隧道的数据流向是:本地应用→SSH加密通道→服务器本机→数据库,数据库层面看到的请求来自服务器本机(127.0.0.1),而不是公网,所以账号只要允许localhost访问就足够,公网账号权限反而成为多余的安全风险,这也正是隧道方案比直连方案更受推荐的原因:你可以在数据库层面关闭所有外部访问,只留本地连接,安全性在业务层面就完成了闭环。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/762939.html





