Skip to content

通过 SSH 隧道连接 MySQL 数据库教程

通常为了安全,MySQL 数据库并不会直接对外开放,而是通过跳板机(Bastion Host)或服务器提供访问。这时,我们可以使用 SSH 隧道 的方式来安全连接远程 MySQL。

一、前提条件

  • 本地已安装 MySQL 客户端(如 mysql 命令)
  • 拥有远程服务器的 SSH 访问权限(用户名、主机名/IP、私钥或密码)
  • 知道数据库的主机地址(通常是 localhost 或 127.0.0.1)和端口(默认 3306)注意这里IP是本地IP!不是远端Linux地址!
  • 拥有 MySQL 用户名和密码

二、建立 SSH 隧道的方式

方式一:使用命令行(推荐)

bash
ssh -L 3307:127.0.0.1:3306 username@remote_host
  • 3307:本地端口,可以是任意未被占用的端口
  • 127.0.0.1:3306:远程服务器上 MySQL 的地址和端口
  • username@remote_host:远程服务器的 SSH 登录信息

此命令会将本地 3307 端口映射到远程服务器上的 127.0.0.1:3306。执行后保持这个终端窗口打开。


三、连接 MySQL 数据库

在另一个终端中使用以下命令连接:

bash
mysql -h 127.0.0.1 -P 3307 -u mysql_user -p
  • -h 127.0.0.1:连接本地的端口
  • -P 3307:上面建立的本地映射端口
  • -u mysql_user:MySQL 用户名
  • -p:提示输入 MySQL 密码

四、使用 SSH 私钥(可选)

如果使用私钥文件(如 .pem)进行认证:

bash
ssh -i /path/to/private_key.pem -L 3307:127.0.0.1:3306 username@remote_host

五、使用图形化客户端(如 DBeaver / TablePlus)

  1. 创建一个新连接,数据库类型选择 MySQL

  2. 主机填写:127.0.0.1

  3. 端口填写:3307

  4. 用户名 / 密码:填写数据库账户

  5. SSH 选项卡中填写:

    • SSH 主机:remote_host
    • SSH 用户名:username
    • 私钥或密码:根据情况填写

六、常见问题

  • 端口冲突:如果本地 3307 已被占用,可以换成其他如 3308
  • 连接拒绝:确保你连接的是远程服务器本地的 MySQL(127.0.0.1:3306),不是公网 IP
  • 防火墙限制:确保 SSH 端口(通常是 22)未被阻止