网站
通过 SSH 隧道连接到您的数据库
Your site's MySQL server only listens on the server's own loopback address, so a desktop tool such as TablePlus, Sequel Ace, DBeaver or MySQL Workbench cannot dial it directly. An SSH tunnel gives…
您的网站的MySQL服务器仅监听服务器自身的环回地址,因此TablePlus、Sequel Ace、DBeaver或MySQL Workbench等桌面工具无法直接连接它。SSH隧道为这些工具提供一个本地端口,该端口被转发到数据库,这样您可以获得对数据的适当GUI,而无需向互联网开放MySQL。
为什么需要隧道
打开网站,点击该网站,然后点击文件,再点击数据库。连接详情卡片将主机显示为127.0.0.1,端口显示为3306。这不是占位符:数据库确实仅接受来自其运行所在机器的连接。公网上没有任何东西可以到达端口3306,这样可以消除整个攻击类别。
SSH隧道安全地填补了这一空隙。您的SSH客户端在您的笔记本电脑上打开一个端口,加密您发送给它的所有内容,然后从服务器内部将其交给数据库,就像本地进程已连接一样。

您首先需要什么
隧道是一个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,隧道将无法绑定并出现"address already in use"错误。任何空闲的本地端口都可以。
将您的数据库客户端指向隧道
在您的GUI客户端中,使用这些值创建一个普通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
手动转储是一个便利副本,不是备份策略。它的新鲜度只取决于您运行它的那一刻,它存在于您运行它的任何笔记本电脑上。Kapsule已经为该网站进行自动每日备份,保留30天。在您依赖本地.sql文件之前,请参阅进行备份。
故障排除
**打开隧道时"Address already in use"。**您机器上的某些东西已经在该本地端口上。选择另一个,例如-L 3399:127.0.0.1:3306,并更改客户端中的端口以匹配。
**数据库客户端出现"Connection refused"。**隧道未打开。检查SSH终端是否仍在运行且未打印错误,以及您的客户端中的端口是否与-L参数中的本地端口匹配。
**SSH连接但客户端仍然超时。**确认您转发到127.0.0.1:3306而不是公网主机名。转发到公网名称会要求服务器通过互联网到达数据库,这正是被阻止的内容。
**"Access denied for user"。**SSH登录成功但MySQL凭证错误。使用复制图标从数据库标签中再次复制用户名和密码,而不是重新输入,并检查您是否连接到正确的数据库名称。
**Permission denied (publickey),甚至在您到达MySQL之前。**那是SSH层,不是数据库。请按照将SSH密钥添加到网站中的故障排除部分进行操作。
接下来去哪里
- 使用SFTP上传文件对文件传输使用相同的SSH凭证。
- 使用phpMyAdmin进行基于浏览器的数据库工作。
- 从备份恢复,如果查询的执行范围超出了您的预期。