在 FreeBSD 上运行 MySQL 的 SSH 隧道(Heidi SQL)

在 FreeBSD 上运行 MySQL 的 SSH 隧道(Heidi SQL)

我正在尝试使用 SSH 隧道访问在 FreeBSD 10.1 服务器上运行的 MySQL 服务器。这些尝试是使用 Heidi SQL 完成的 (http://www.heidisql.com/)。

FreeBSD 服务器上的 SSH 守护进程不允许 root 登录。我们必须先使用 wheel 组的帐户成员,然后 SU 切换到 root。

我认为问题是:SSH 守护程序是否需要允许 root 登录才能连接到 MySQL 服务器?因为无论我尝试什么,MySQL 服务器都会响应“访问被拒绝”。

HeidiSQL 的输出:

/* [SRV03 Live (SSH)] Connection to 127.0.0.1 closed at 2015-07-16 13:20:00 */
/* Connecting to 127.0.0.1 via MySQL (SSH tunnel), username ******, using password: No ... */
/* Attempt to create plink.exe process, waiting 4s for response ... */
/* C:\Program Files\Putty\plink.exe -ssh [email protected] -pw "******" -P 12345 -N -L 3307:127.0.0.1:3306 */
SELECT CONNECTION_ID();
/* Connected. Thread-ID: 1913 */
/* Characterset: utf8mb4 */
SHOW STATUS;
SHOW VARIABLES;
/* Entering session "SRV03 Devel (SSH)" */
/* Access is denied */

任何对此的想法都将非常感激。

谢谢,

答案1

您的问题很可能与 MySQL 有关。与 HeidiSQL 关系不大,与 FreeBSD 关系不大。您提供的细节很少,但我们可以说:

误解:

  • FreeBSD 系统的“root”和 MySQL 的“root”用户没有关系!
  • 您无需以“root”身份登录 FreeBSD 系统即可以 MySQL“root”身份在 MySQL 数据库中工作
  • 您不需要使用 wheel 成员的帐户(因为您不需要 su 到“root”)
  • 任何 FreeBSD 用户都可以使用以下方式连接到 MySQL任何MySQL 用户名。对 MySQL 的访问受限于命名管道或 TCP。MySQL 不关心哪个系统 (FreeBSD) 用户正在连接。

您正在尝试将 3 种技术绑定在一起:MySQL、SSH 隧道和 HeidiSQL。

为了进行故障排除,您需要确认每个组件是否单独运行。目前看来,您试图一次性修复所有问题。但我们需要确定根本原因(不要与 FreeBSD“根”或 MySQL“根”混淆 :-))

FreeBSD

当您尝试连接到 MySQL 服务器时,这将通过网络堆栈进行。如果您没有设置防火墙,那么您应该可以顺利进行。

但是,如果您有防火墙(通常是“pf”),那么您可能需要允许 localhost (127.0.0.1) 访问端口 3306 (MySQL)。如果您在监狱中运行,情况尤其如此。我假设您使用防火墙是因为您正在尝试隧道传输流量。我注意到您的 SSH 在端口 12345 而不是 22 上运行。

如果您对防火墙设置是否正确存疑,并且您正在受信任的网络上工作,那么请在测试时禁用“pf”。这将使您的生活变得轻松很多!

MySQL

验证您拥有一个有效的 MySQL 用户,并且可以使用本地网络连接连接到数据库。

  1. 使用任意帐户通过 SSH 连接到 FreeBSD 服务器
  2. 使用 MySQL 客户端访问 MySQL 数据库

    mysql -u USERNAME –h 127.0.0.1 –p

-h 很重要,因为您随后将使用 TCP 连接,而不仅仅是命名管道。验证您是否可以访问要使用的架构

mysql> USE databasename
mysql> SELECT * FROM tablename LIMIT 10

HeidiSQL

如果您可以通过 MySQL 客户端连接,那么我们就可以开始测试 HeidiSQL。如果 FreeBSD 服务器上没有防火墙,那么请验证您是否可以使用 MySQL 用户名和密码从 HeidiSQL 直接连接。

如果您确实有防火墙,那么我会尝试从您的 IP 打开端口 3306 进行测试。如果您使用“pf”,请使用以下之一:

pass in on $ext_if proto tcp from any to any port 3306

pass in on $ext_if proto tcp from YOURIPADDRESS to any port 3306

这样,您就可以再次确认无需隧道即可从 HeidiSQL 正确连接到 MySQL。测试完成后,您可以删除此规则。

最后,您可以通过手动启动隧道进行测试。退出 HeidiSQL 并在命令提示符中输入以下内容:

"C:\Program Files\Putty\plink.exe" -ssh [email protected] -pw "******" -P 12345 -N -L 3307:127.0.0.1:3306

这应该会将您连接到 FreeBSD 服务器并建立隧道。如果成功,您可以启动 HeidiSQL 并尝试与 MySQL 建立正常连接(但在端口 3307 上)

以上是我自己调试类似您的问题时遵循的步骤。

相关内容