跳至正文
目录
网站

通过 SSH 隧道连接您的数据库

此内容为机器翻译,如需查阅原文请查看英语版本。

您网站的数据库只在服务器自身的回环地址上监听,因此像 TablePlus、Sequel Ace、DBeaver 或 MySQL Workbench 这样的桌面工具无法直接连接到它。SSH 隧道可以为这些工具提供一个转发到数据库的本地端口,这正是在不将 MySQL 暴露到公网的情况下,为您的数据接入一个合适的图形界面工具的方法。

为什么需要隧道

打开网站,点击该网站,然后点击数据库。连接详情卡片显示主机为 127.0.0.1,端口为 3306。这不是一个占位符:该数据库确实只接受来自其自身运行所在机器的连接。公网上的任何设备都无法访问 3306 端口,这从根本上消除了一整类攻击。

SSH 隧道能够安全地弥补这一缺口。您的 SSH 客户端会在您的笔记本电脑上打开一个端口,对您发送到该端口的所有内容进行加密,然后从服务器内部将其交给数据库,效果就如同本地进程直接建立了连接一样。

KPanel 中显示连接详情的数据库选项卡

您首先需要准备的内容

隧道本质上是一条 SSH 连接,因此在进行以下任何操作之前,您需要先为该网站注册一个 SSH 密钥。请先按照为网站添加 SSH 密钥中的步骤操作,然后再回到本文。

请准备好以下四项信息:

  • SSH 主机、端口和用户名:在设置,然后SSH 密钥中的连接详情卡片内查看。
  • 数据库名称、用户名和密码:在数据库中查看。点击眼睛图标可显示密码,点击复制图标可将其复制到剪贴板。

如果数据库选项卡显示该网站类型未配置数据库,说明该网站没有数据库。静态网站和部分 Node.js 网站创建时不包含数据库。

从终端打开隧道

基本思路是:将一个本地端口转发到 SSH 连接远端的 127.0.0.1:3306。

ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
  • -L 3307:127.0.0.1:3306 会在您的本机上打开 3307 端口,并将其转发到服务器回环接口的 3306 端口。
  • -N 表示不运行 shell,只是保持隧道开启。
  • 如果该网站所用的密钥不是您的默认密钥,请加上 -i /path/to/key。

请保持该终端窗口持续运行。只要它处于打开状态,您笔记本电脑上的 127.0.0.1:3307 就等同于该网站的数据库。

请在本地使用 3307 而非 3306。如果您自己的机器上已安装了 MySQL 或 MariaDB,那么 3306 端口很可能已被占用,隧道会因“地址已被占用”的错误而无法绑定。使用任意一个空闲的本地端口即可。

将数据库客户端指向隧道

在您的图形界面客户端中,创建一个普通的 MySQL 连接,并填入以下值:

字段值
主机127.0.0.1
端口3307(您转发的本地端口)
用户数据库选项卡中的用户名
密码数据库选项卡中的密码
数据库数据库选项卡中的数据库名称

请不要在“主机”字段中填入 SSH 主机。就客户端而言,它连接的其实是您自己机器上的数据库。

内置 SSH 选项卡的客户端

TablePlus、Sequel Ace、DBeaver 和 MySQL Workbench 都可以自行管理隧道,省去了保持终端开启的麻烦。请填写以下两组字段:

  • SSH 部分:主机、端口、用户名以及来自 SSH 密钥页面的私钥文件。
  • 数据库部分:主机 127.0.0.1、端口 3306,以及数据库选项卡中的数据库名称、用户名和密码。

当客户端建立隧道时,数据库部分请使用 3306,而非您本地转发的端口。因为客户端是从服务器的视角进行连接的,所以它看到的是真实端口。

改用 phpMyAdmin

如果您只是想快速查看某个表,其实完全不需要隧道。数据库选项卡中有一个 phpMyAdmin 卡片,带有打开 phpMyAdmin 按钮。它会通过 KPanel 为您完成登录,因此无需记住另外的密码,并且会在新标签页中打开,自动指向该网站的数据库。

对于浏览数据、执行一次性查询或核对某个数值,phpMyAdmin 是更快捷的选择。而对于大型导出、架构调整,以及任何您想要编写脚本处理的工作,通过隧道使用桌面客户端会更合适。浏览器方式请参阅使用 phpMyAdmin。

通过隧道执行查询与导出

隧道开启后,标准的命令行工具可以照常使用,只需指向您本地转发的端口:

mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql

手动导出只是一份便捷备份,并不能替代真正的备份策略。它只能反映您运行该操作那一刻的数据状态,并且只保存在您当时所用的那台笔记本电脑上。KapsuleHost 本身已经每天为网站自动创建备份,并保留 30 天。在依赖本地的 .sql 文件之前,请先参阅创建备份。

故障排查

打开隧道时提示“地址已被占用”。 说明您机器上的该本地端口已被其他程序占用。请换一个端口,例如 -L 3399:127.0.0.1:3306,并在客户端中将端口改为与之一致。

数据库客户端提示“连接被拒绝”。 说明隧道尚未建立。请检查 SSH 终端是否仍在运行、是否没有报错,并确认客户端中填写的端口与 -L 参数中的本地端口一致。

SSH 已连接,但客户端仍然超时。 请确认您转发的目标是 127.0.0.1:3306,而不是公开主机名。转发到公开主机名会要求服务器通过公网访问数据库,而这正是被阻止的行为。

提示“用户访问被拒绝”。 说明 SSH 登录已经成功,但 MySQL 凭据有误。请使用复制图标重新从数据库选项卡中复制用户名和密码,而不要手动输入,并确认您连接的数据库名称是否正确。

在尚未连接到 MySQL 之前就提示“Permission denied (publickey)”。 这属于 SSH 层面的问题,而非数据库问题。请参阅为网站添加 SSH 密钥中的故障排查部分进行处理。

后续可查阅内容

这对您有帮助吗?

您是 AI 吗?以 Markdown 格式阅读本页

相关文章

通过 SFTP 连接:FileZilla、Cyberduck 与命令行SFTP(Secure File Transfer Protocol,安全文件传输协议)可让您直接访问服务器上网站的文件。本指南涵盖成功连接所需的全部内容,从查找凭据到排查错误。…SSL 证书与 HTTPS本文将以通俗易懂的语言说明什么是SSL、KapsuleHost如何为您的网站自动处理SSL,以及当证书出现问题时应如何处理。 --- 什么是 SSL,为什么它很重要?…网站:从何处开始KapsuleHost的网站托管如何运作、一个站点的每个标签页上有什么内容,以及针对您眼前的任务应该阅读哪一篇指南。 托管站点的一切都在KPanel侧边栏的网站中管理。…网站正常运行时间监控KapsuleHost 上的每个网站都会每 60 秒自动检查一次,"正常运行时间"标签页会显示检查结果:当前状态、正常运行时间百分比、响应时间,以及完整的事件历史记录。…

仍未解决?

询问了解您账户的 Kora,或联系我们的团队。

联系我们发送邮件