我在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”。 ?
#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密钥即可。例如:
评论
真是的bugs.mysql.com/bug.php?id=61368显示这是OpenSSH格式所需的PRIVATE密钥文件。我对此感到疑惑,但不确定。