尝试通过 SSH 使用带有 TCP/IP 的 MySQL Workbench - 连接失败

Diz*_*ley 49 mysql mysql-workbench

我无法从 PC 在 MySQL Workbench 中使用 TCP/IP 通过 SSH 连接进行连接。这是怎么回事?

我在 Ubuntu 服务器mysql.myhost.com上创建了一个 MySQL 5.1 数据库。我可以在本地访问它。MySQL Workbench (PC) 提供通过 ssh 通过 TCP 建立连接。它在命令行 mysql 工作正常的远程服务器上的端口 3306 上运行。

我使用了以下会话详细信息:

  • 连接方法:通过 SSH 的 TCP/IP。
  • SSH 主机名:mysql.myhost.com :3306
  • SSH 用户名:我的 linux 登录名
  • SSH公钥文件:我本地的公钥文件
  • MySQL 主机名:127.0.0.1 MySQL
  • 服务器端口:3306
  • 用户名:root

当我尝试连接时收到一条错误消息:“无法使用 root 用户通过 mysql.myhost.com 上的 SSH 隧道在 127.0.0.1:3306 连接到 MySQL”

“无法连接到 '127.0.0.1' (10061) 上的 MySQL 服务器”

作为另一个测试 - 我使用 Putty 设置了一个端口为 3306 的 SSH 隧道,我可以使用 MySQL Workbench 通过该隧道连接 OK,该隧道将连接到我的本地 3306 的连接转发到远程服务器,如上所述。但是我无法在 Workbench 中使用“TCP/IP over SSH”。

次要问题:当 Workbench 询问“SSH 公钥文件的路径”时,它真的不需要我的私钥文件吗?

Eye*_*Eye 35

当我自己遇到这个错误时,我偶然发现了这个问题。我终于可以弄清楚配​​置了。

  1. 我没有触及 /etc/mysql/my.cnf 中已经有 bind_address = 127.0.0.1 的任何东西。所以只有本地主机可以连接。
  2. 我使用 OpenSSH 服务器。因此,在其配置文件 /etc/ssh/sshd_config 中,我将负责 TCP 转发的参数从no更改为yes,因此AllowTcpForwarding yes
  3. 最后,我在 MySQL WorkBench 中输入了以下内容。

    • SSH 主机名:192.168.0.8 : 22(我的 SSH 服务器侦听端口 22)
    • SSH 用户名:sshuser
    • SSH 密钥文件:*C:\Users\windowsuser\.ssh\id_rsa*(应该是私钥,即使它说的是 public)
    • MySQL 主机名:127.0.0.1(不应更改,因为默认情况下 MySQL 服务器仅绑定到 localhost,我没有更改)
    • MySQL 服务器端口:3306(也是默认值)
    • 用户名:root

剩下的唯一事情就是正确配置 SSH 服务器以使用密钥而不是密码。希望这会帮助某人。


Rol*_*DBA 9

您可能需要检查 mysql.user 表中的用户。

运行此查询:

SELECT user,host FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)

您应该会看到如下内容:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

请注意

  • root@localhost 只能从 localhost 登录。
  • ping@'%' 可以通过 TCP/IP 登录
  • admin@10.67.135.% 只能从那个网块通过 TCP/IP 登录
  • icorbin@10.67.135.% 只能从那个网络块通过 TCP/IP 登录

如果您希望 root 通过 TCP/IP 连接,您必须为 root 用户指定 IP 地址或网络块。

像这样的东西:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';
Run Code Online (Sandbox Code Playgroud)

或者如果 root@localhost 的 root 密码相同,则

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';
Run Code Online (Sandbox Code Playgroud)

注意:通常不推荐 root@'%'。也许尝试 root@'10.%' 或任何其他用于 root 的网络块。

试一试 !!!

  • `...@localhost` 不应该通过 SSH 隧道工作,因为就 MySQL 服务器而言,连接来自隧道的末端? (4认同)

Bru*_*uno 8

我认为 TCP/IP over SSH 方法的工作原理是在 MySQL 连接的基础上建立一个“正常”的 SSH 连接(-L与使用 OpenSSH 命令行客户端隧道使用的方式相同)。

因此,您需要在建立隧道的服务器上指定与 SSH 服务器的连接。在这里,您似乎正在使用mysql.myhost.com:3306,这意味着您正在端口 3306 上运行此 SSH 服务器(不是 MySQL)。

可以将 127.0.0.1:3306 上的 MySQL 服务器和mysql.myhost.com端口 3306上的外部 IP 地址上的 SSH 服务器绑定,但这不太可能。我猜您的 SSH 服务器正在侦听端口 22(默认)。

您可能应该使用mysql.myhost.com:22. (检查您是否也可以通过普通 SSH 客户端(例如 Putty)连接到它。)