Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > ssh隧道安全连接远程mysql

通过SSH隧道安全连接远程MySQL数据库端口的操作方法

作者:茶猫云呀

这篇文章给大家介绍通过SSH隧道安全连接远程MySQL数据库端口的操作方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

最稳妥的做法是通过 SSH 隧道将远程数据库端口映射到本地,避免直接把 MySQL 端口暴露在公网上,适合运维管理或远程开发场景。

先说结论:SSH 隧道能加密传输流量并利用 SSH 认证机制,比直接开放 3306 端口更安全。

命令速用版

在本地终端执行以下命令,将远程服务器的 3306 端口映射到本地的 3307 端口:

ssh -L 3307:127.0.0.1:3306 -N -f user@remote_host

其中 user 是远程服务器登录用户,remote_host 是服务器 IP 或域名。完成后,本地连接 127.0.0.1:3307 即等同于连接远程数据库。

为什么会这样

MySQL 默认通信协议在未配置 SSL 的情况下是明文的,直接暴露 3306 端口容易受到中间人攻击或暴力破解。SSH 隧道利用已有的 SSH 加密通道转发数据,既不需要额外配置数据库 SSL 证书,又能复用服务器的 SSH 防火墙策略,实现网络层面的隔离。

分步处理

第一步:确认 SSH 连通性先确保本地能通过 SSH 登录远程服务器,建议使用密钥认证而非密码,减少被爆破风险。如果尚未配置密钥,可使用 ssh-keygen 生成并通过 ssh-copy-id 上传。

第二步:建立隧道执行上述速用版命令。参数 -N 表示不执行远程命令,-f 表示后台运行。如果需要保持连接活跃,可在 SSH 配置中开启 ServerAliveInterval

第三步:配置数据库客户端在 Navicat、DBeaver 或命令行中,主机填 127.0.0.1,端口填 3307,用户名和密码填写数据库本身的凭证,而非 SSH 凭证。

怎么验证是否生效

在本地终端使用 MySQL 客户端尝试连接:

mysql -h 127.0.0.1 -P 3307 -u db_user -p

连接成功后,执行 SELECT 1; 确认数据交互正常。同时可以在远程服务器上执行 SHOW PROCESSLIST;,能看到来自 localhost 的连接请求,说明隧道转发正确。

常见坑

1. 数据库用户权限限制MySQL 用户表中的 host 字段必须允许来自 SSH 服务器本地的连接。通常设置为 localhost 或 127.0.0.1 即可,因为对数据库而言,连接确实来自服务器本机。如果设置为特定 IP,可能会拒绝连接。

2. 隧道断开导致连接失效SSH 会话超时会导致隧道关闭。建议在 SSH 配置文件 ~/.ssh/config 中增加保活设置,或使用 autossh 工具自动维护隧道连接。

3. 本地端口被占用如果本地 3307 端口已被占用,命令会执行失败。可更换为其他高位端口,如 33070,并在客户端相应修改配置。

到此这篇关于通过SSH隧道安全连接远程MySQL数据库端口的操作方法的文章就介绍到这了,更多相关ssh隧道安全连接远程mysql内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文