无法使用Workbench通过SSH连接到MySQL数据库


10

我正在尝试使用MySQL Workbench从我们的一台Web应用程序服务器通过SSH隧道连接到我的数据库。这是基本配置;请注意,出于安全原因,我更改了屏幕快照中的一些值。

工作台截图

问题是每次我尝试从我们的一台应用程序服务器通过SSH隧道连接时,都会出现以下错误:

无法使用用户social_shop_prod通过computer.amazonaws.com上的SSH隧道连接到us-east-1.amazonaws.com。无法连接到127.0.0.1上的MySQL服务器。

但是,如果我通过以下命令行通过SSH使用相同的凭据:

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

我可以成功连接并获得MySQL交互式命令提示符。

在这里与我的开发团队的其他成员交谈时,我们谁也无法弄清楚为什么我无法使用Workbench从我们的应用程序服务器通过SSH进行隧道传输;但是当我SSH到我们的一台应用程序服务器并通过命令行连接到MySQL时;我可以成功连接。

为什么要尝试连接127.0.0.1以上?我没有在配置中指定;我的主机文件也没有将下面显示的域重定向到该IP。

非常感谢任何建设性的投入。

Answers:


5

由于您是通过SSH隧道连接的,因此这意味着us-east-1.amazonaws.com的MySQL端口3306已在您的计算机上本地打开。您计算机的IP地址是127.0.0.1或localhost。当您连接到us-east-1.amazonaws.com上的mysql服务器时,实际上是通过127.0.0.1(即您的计算机)访问它。如果您打开了另一个隧道,或者您的计算机在本地运行了MySQL,则可能是其他MySQL服务器拒绝了您的身份验证尝试

您可以尝试一些测试:

1. Windows计算机正在侦听哪些端口

在命令提示符下:netstat -a(列出所有打开的端口)

在Linux中将是:netstat -tlpn

2.基本的连通性测试

从DOS命令提示符或Linux控制台:telnet 127.0.0.1 3306

如果超时,或其他程序响应,则说明隧道设置不正确。

3.更改MySQL Workbench在本地打开的端口号

我们假设MySQL工作台正在您的计算机上创建隧道。如果是这样,请在MySQL工作台中尝试通过另一个端口号(例如9000)进行隧道传输。

确保9000未从以下端口列出为开放端口:netstat -a

如果您拥有ssh访问us-east-1.amazonaws.com

4.尝试从us-east-1.amazonaws.com连接到MySQL

mysql -u myuser -h 127.0.0.1 -p

正如Rolando所说,您将要验证是否使用正确的凭据进行连接。例如,如果您以myuser@127.0.0.1的身份进行连接,而用户myuser没有主机,则可能无法使用user@127.0.0.1。进行连接。


2

之所以联系127.0.0.1,是因为隧道将本地计算机上的端口连接到远程主机。该消息似乎表明未建立SSH连接。

从命令行尝试:

ssh -L 33000:remotehost:3306 user@remotehost

确保SSH允许转发端口;如果您收到一条消息,指出不允许转发或拒绝转发,那么这就是原因。

要解决此问题,您必须更改服务器配置。将此配置添加到SSH服务器:

AllowTcpForwarding yes

不要忘记重新启动服务器以激活此配置。


你能解释一下该命令吗?您要绑定地址吗?可以与mysql命令结合使用吗?
Thufir

在这里使用SSH可以建立隧道,仅此而已。它将远程端口连接到本地端口。在这种情况下,您要做的是将本地端口绑定到远程MySQL端口。
2015年

1

我已经设法解决了这个问题近2个星期。我将其张贴在这里,以便更多的人可以尝试。

好的,我正在使用OpenSSH(Win10本机)和Workbench 8。

分步操作:
1.使用ssh-add将SSH主机密钥添加到代理。
2.使用ssh-keygen生成密钥对。就我而言,这些文件会Users/myUser/.ssh根据安装配置自动进入。
3.将公共密钥添加到没有扩展名的authorized_keys文件(对于我来说,该文件必须在您的服务器安装路径中Windows/System32/OpenSSH/.ssh)。
4.使用ssh-add将刚刚生成的密钥添加到代理。

上面的步骤几乎是命令行SSH服务器的配置,我发现OP已经为他的连接所做的工作正在通过终端进行。要配置MySQL Workbench 8,您几乎需要执行完全相同的操作,除了必须将private_key.pem转换为OpenSSH格式,然后才能将它们移至Users/myUser/.ssh和。OpenSSH_instalation_path/.ssh

  1. 使用PUTTYgen 将private_key.pem转换为OpenSSH格式。
  2. 复制“要粘贴到OpenSSH的公钥的授权密钥”字段。
  3. 将公钥保存在文件夹中,User/myUser/.ssh然后OpenSSH_instalation_path/.ssh
  4. 将您从PUTTY复制的密钥粘贴到该文件夹中的authorized_keys文件中OpenSSH_instalation_path/.ssh
  5. 将OpenSSH格式密钥导出到User/myUser/.ssh
  6. 重新启动sshd和mysql服务
  7. 配置工作台以使用转换后的私钥连接到SSH服务器。

更新:您将需要在sshd_config文件中设置以下内容:

PermitRootLogin不带密码
PubkeyAuthentication是
PasswordAuthentication否
PermitEmptyPasswords否
AllowTcpForwarding是

请阅读:

我是一位经验不足的分析师,所以如果高级用户知道两个.ssh文件夹中的哪一个是正确的文件夹,请告诉我们。我发现OpenSSH对此有点模棱两可。
这仅在使用本地主机设置本地开发环境时为我工作。仅用于学习目的。
您可能需要在测试连接之前将myUser @ localhost添加到MySQL Workbench用户。
如果确实需要,我可以添加图像。


0

就我而言,这个问题我不得不切换回有效的域名或IP,而不是本地解决的自定义主机。

自定义主机解析失败(/etc/hosts

我使用本地主机解析机制来定义:

#.#.#.#    my-vm

出于某种原因,与MySQL 5.2.47Linux Mint 14 (Nadia)这是类似Ubuntu 12.10 (Quantal)解决机制不起作用

简单地切换到一个公共域名,如my-website.com解决问题。


@Mat已修复,thanj = ks
爱德华·洛佩兹


0

我遇到了类似的问题,这也许很明显,但是请检查您在AWS中的防火墙规则。我设置了IP范围,以限制来自外界的连接。我办公室的IP发生了变化,因此超出了IP范围。我在另一个办公室的同事仍然可以连接,所以我认为问题出在我的PC上,但是问题出在AWS的防火墙规则上。希望能帮助到某人:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.