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

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

我使用了以下会话详细信息:通过SSH。
SSH主机名:mysql.myhost.com:3306
SSH用户名:我的Linux登录名

SSH公钥文件:我的本地公钥文件

MySQL主机名:127.0.0.1 MySQL
服务器端口:3306
用户名:root

当我尝试连接时收到错误消息:
“失败使用用户根用户通过mysql.myhost.com上的SSH隧道以127.0.0.1:3306连接到MySQL的“

”无法连接到'127.0.0.1'(10061)上的MySQL服务器” br />
作为另一个测试-我使用Putty设置了具有端口3306的SSH隧道,并且可以使用MySQL Workbench通过该隧道连接OK,如上所述,该隧道将与本地3306的连接转发到远程服务器。但是我无法在Workbench中使用“基于SSH的TCP / IP”。 ?

评论

真是的bugs.mysql.com/bug.php?id=61368显示这是OpenSSH格式所需的PRIVATE密钥文件。我对此感到疑惑,但不确定。

#1 楼

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


我没有碰过/etc/mysql/my.cnf中已经具有bind_address = 127.0.0.1的任何内容。因此只有本地主机可以连接。
我使用OpenSSH服务器。因此,在其配置文件/ etc / ssh / sshd_config中,我将负责TCP转发的参数从no更改为yes,因此将AllowTcpForwarding是yes。

最后我在MySQL WorkBench中输入了以下内容。

SSH主机名:192.168.0.8:22(我的SSH服务器侦听端口22)
SSH用户名:sshuser

SSH密钥文件:* C:\ Users \ windowsuser \ .ssh \ id_rsa *(即使显示为公用,也应为私钥)
MySQL主机名:127.0.0.1(不应更改,因为默认情况下,MySQL服务器仅绑定到本地主机,我没有这样做) 't change)
MySQL Server端口:3306(也是默认值)
用户名:root





是为了正确配置您的SSH服务器以使用密钥而不是密码。希望这会对某人有所帮助。

评论


我需要在服务器端做的一件事是确保/ etc / ssh / sshd_config包含以下行:AuthorizedKeysFile /home/root/.ssh/authorized_keys,并且authorized_keys具有PUBLIC密钥作为条目。

– RyanNerd
2015年12月15日6:31



请说明将设置AllowTcpForwarding yes的第2步是否应用于远程服务器,即具有我们要连接的MySQL实例的主机;或安装了MySQL Workbench的本地计算机

– Nam G VU
17年4月11日在3:45



@NamGVU步骤2适用于安装MySQL的远程服务器。特别是到通过SSH提供到MySQL隧道的OpenSSH服务器。

–眼睛
17年4月11日在4:54

我尝试过,但仍然无法通过隧道进行。 MySQL Workbench告诉我要在日志文件中阅读更多错误详细信息。你知道在哪里读书吗?

– Nam G VU
17年4月11日在4:58

我今天可以正常工作-配置AllowTcpForwarding条目后需要重新启动

– Nam G VU
17年4月12日在10:40

#2 楼

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

运行此查询:

SELECT user,host FROM mysql.user;


您应该看到类似以下内容:

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)


请注意,


root @ localhost只能从localhost登录。
ping @'%'只能通过TCP / IP登录
admin@10.67.135.%只能通过该Netblock通过TCP / IP登录

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

类似这样的内容: br />
,或者如果root @ localhost的root密码相同,则

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';


CAVEAT:通常不建议root @'%'。也许尝试用root@'10.%'或任何其他netblock代替root。

尝试一下!!!

评论


... @ localhost是否不应该通过SSH隧道工作,因为就MySQL服务器而言,连接来自隧道的末端?

–布鲁诺
2011-6-30在16:56



@Bruno:一种确定的知道方法是成功连接然后运行SELECT USER(),CURRENT_USER();。并查看其输出。函数USER()回显您尝试进行身份验证的内容,而CURRENT_USER()回显MySQL允许您进行身份验证的内容。如果CURRENT_USER()回显root @ localhost,则您的问题的答案为是。

– RolandoMySQLDBA
2011年6月30日17:43



#3 楼

我认为TCP / IP over SSH方法通过在MySQL连接基础上建立“正常” SSH连接而起作用(与使用-L和OpenSSH命令行客户端进行隧道传输的方式相同)。因此,您需要在建立隧道的服务器上指定到SSH服务器的连接。在这里,您似乎正在使用mysql.myhost.com:3306,这意味着您正在端口3306上运行此SSH服务器(而非MySQL)。

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

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

#4 楼

您可能正在使用旧版本的MySQL Workbench,并且需要更新。这是版本6.0.8中的错误,当前是Ubuntu存储库中的版本。为我更新了6.3.6版。

在此处下载:http://dev.mysql.com/downloads/workbench/#downloads

#5 楼

在其他任何答案中都没有提到的一件事是,如SO(https://stackoverflow.com/questions/34504232/mysql-workbench-failing-to-connect-via- ssh-due-to-key / 38108623#38108623)。尽管有答案,我仍然能够在MySQL Workbench 6.3.7(64位,Windows 10)上使用受密码保护的密钥。 br />

#6 楼

我的问题是由于我尝试使用ed25519 SSH密钥。我在auth.log的SSH服务器上注意到此错误:

sshd[25251]: Connection closed by 192.168.x.x [preauth]


一旦我改用RSA密钥,一切都会按预期进行。

#7 楼

您正在尝试通过ssh但使用mysql端口连接到服务器。所需的端口是ssh服务器正在侦听的端口,通常为22,然后为localhost和3306作为mysql主机名和端口。

#8 楼

我遇到了同样的问题。我检查并尝试将AllowTcpForwarding设置为Yes,但在我的sshd_config中丢失了它,因此没有帮助。确保ssh主机名与mysql主机名不同(使用localhost)。

在工作台中,选择+添加新连接并设置以下内容: />连接方法:通过SSH的标准TCP / IP
SSH主机名:192.168.0.50:22(放置远程SSH服务器IP和端口(可选))
SSH用户名:sshuser
您可以设置密码或在提示符处添加
MYSQL主机名:localhost或127.0.0.1

MYSQL服务器端口:3306

您可以设置密码或在提示符处添加

测试连接。应该会成功,然后点击OK。Viola!

#9 楼

有时PuTTY创建的密钥将无法使用。在Linux机器上使用ssh-keygen创建密钥对。将新id_rsa的内容复制到Windows上的文本文件中。确保在Linux机器上将id_rsa.pub的内容添加到authorized_keys。 Workbench中的所有其他默认值都很好,包括MySQL主机名的127.0.0.1。当然,它必须是通过SSH的标准TCP / IP。

#10 楼

我想出了同样的错误。问题是“有点”超时。我甚至将值提高了120秒也无济于事。我的假设是尝试从IPv4连接到IPv6时出现问题。

#11 楼

我想出了同样的错误。我的情况:


Ubuntu 18.04
mysql workbench 8.0.18
不带密码的ssh访问(仅通过公共/私有ssh密钥) >我在以下情况下解决了此问题:



删除mysql-workbench-community(以前是通过mysql网站安装的): y


安装mysql-workbench

sudo apt install mysql-workbench -y

添加新的连接
单击“存储在mysql的“钥匙串”(不是ssh用户),并设置密码
在提示输入密码后单击“测试连接”
,将输入保留为空并选中“保存密码”
单击“确定”


#12 楼

有些人发现很难通过mysql工作台连接到数据库。就我而言,发生这种情况是因为我使用的是8.0版,并且此版本似乎不接受.ppk格式作为SSH密钥文件。
我必须将密钥转换为OpenSSH格式,以便工作台可以接受
不了解使用Putty进行转换的用户的逐步操作:
打开PuTTYgen程序>转换>导入密钥>'使用来选择密钥。 ppk格式”>“导出OpenSSH”>选择目录并保存新格式。
将此文件用于mysql workbench,它将起作用。

#13 楼

在连接运行MySQL 5.5.29和MySQL Workbench 5.2.40的服务器的Ubuntu计算机上也遇到了同样的问题。 SSH服务器需要使用ssh-key。

我无法使用root用户连接到MySQL服务器,相反,我不得不创建一个单独的非root用户进行登录。之后,我就可以正常连接。

希望这会有所帮助。

#14 楼

好的,我知道这是一个老问题,但是我花了几个小时才拔掉头发。我检查了Bruno和Eye提到的所有内容,一切似乎都很好。然后我意识到这确实是私钥/公钥的事情。因此,我启动了Pageant并添加了我的私钥,以便它创建了一个公共密钥,MySQL Workbench可以读取该公共密钥,并且可以连接! (当MySQL Workbench实际开始工作时,实际上是一种滑稽动作,但是以一种愉快的方式。)

TLDR:使用Pageant从您的私钥生成公钥。

评论


私钥绝对不能用作公钥,这就是它们为什么是私钥的原因。

–詹姆斯·安德森(James Anderson)
2014年6月3日在17:48

@JamesAnderson不是那个错误是关于什么的吗?文字要求私有,至少应根据错误链接将其读为公开。或不?

– Thufir
15年3月8日在1:44

#15 楼

运行

SELECT user,host FROM mysql.user;


,并确保您要尝试通过Workbench登录的用户在主机栏中输入localhost而不是%

如果显示%,请使用以下方法进行修复:该用户无法通过远程TCP登录)

#16 楼

通过ssh在Amazon ec2上连接托管的mysql时,我偶然发现了该错误。我意识到您必须编辑以下文件。

/ etc / ssh / sshd_config
更改以下内容:
AllowTcpForwading从no改为yes

>还要在/ ect / ssh / sshd_config中的此文件上检查ssh路径是否正确。 AuthorizedKeysFile /home/user/.sshkey

然后重新引导系统并尝试。

#17 楼

只有我发现的内容...通常我是在没有外壳的SSH服务器上创建用户(例如/ sbin / nologin),以防止他们能够登录到服务器并在其中创建文件等...(对于生产系统,我们在防火墙上执行此操作。)

之后,在常规Linux环境中,您仍然可以转发端口,例如:
>然后从本地工作站连接到它,如下所示:该用户使用/ bin / bash的shell,之后一切正常。

不知道为什么Workbench在远程SSH服务器上需要本地shell。

#18 楼

只需使用正确的mysql工作台格式创建一个新的RSA密钥即可。

例如: