无法通过隧道连接到EC2上的MySQL

出于安全考虑,我们希望通过ssh连接到在EC2上运行的MySQL。 我们有其他服务器,我们这样做没有问题,但由于某种原因在EC2它不工作。 该实例正在运行Amazon Linux,MySQL是5.5.42。

我已经validationMySQL用户具有适当的权限。 我在AWS设置中打开了3306,我可以用用户和密码连接到MySQL,没有任何问题。 很明显,我们不希望在防火墙上有这个漏洞来进行生产。

我已经validation用户(当前使用ec2-user进行testing将使用具有有限权限的用户进行生产)可以从EC2上的命令行运行MySQL,并且在使用私钥进行SSH连接时没有问题。

这是我用来在我的Mac上build立隧道的ssh命令:

ssh -nNT -L 3306:IPADDRESS:3306 -i /path-to/key.pem ec2-user@IPADDRESS 

然后我尝试连接到MySQL。 它只是挂起。 如果我杀了隧道,我得到以下消息:

 Lost connection to MySQL server at 'reading initial communication packet', system error: 0 

如果我让它超时,我会得到相同的基本错误:

 Lost connection to MySQL server at 'reading initial communication packet', system error: 35 

和ssh命令报告:

 channel 2: open failed: connect failed: Connection timed out 

我应该注意到,我使用这个基本的命令(除了私钥)来build立到非EC2的隧道,并始终取得成功。

如果我将vvvv添加到ssh命令中,那么在尝试连接到MySQL的时间点超时时间点时会报告:

 debug1: Connection to port 3306 forwarding to IPADDRESS port 3306 requested. debug2: fd 7 setting TCP_NODELAY debug3: fd 7 is O_NONBLOCK debug3: fd 7 is O_NONBLOCK debug1: channel 2: new [direct-tcpip] channel 2: open failed: connect failed: Connection timed out debug2: channel 2: zombie debug2: channel 2: garbage collecting debug1: channel 2: free: direct-tcpip: listening port 3306 for IPADDRESS port 3306, connect from 127.0.0.1 port 49316, nchannels 3 debug3: channel 2: status: The following connections are open: 

我也尝试在Windows上使用一个名为bitvise Tunnelier的客户端,并使用MySQL ODBC驱动程序进行testing,并得到相同的结果 – 当我杀死隧道时,我得到相同的错误信息,这导致我得出结论,服务器。

我已经尝试了一些build议,我已经发现有关向my.cnf中添加skip-networking并将mysqld:ALL:ALLOW和mysqld-max:ALL:ALLOW添加到/etc/hosts.allow的问题。

在这一点上我完全失去了。 我不知道这是MySQL问题,SSH问题还是其他一些EC2networking问题。

您不想尝试将隧道连接连接到EC2实例的公共 IP地址的端口3306,这似乎是你在做什么。

在EC2中,机器具有绑定到其IP栈的私有 IP地址,AWSnetworking硬件执行1:1 NAT来连接公共IP。 它不会把你连接到你自己,因此超时。

使用-L 3306:127.0.0.1:3306 。 SSH知道你不是指你的本地回滚界面,而是远程系统的。 或者,使用远程系统的私有IP地址,您可以在AWS控制台中find该IP地址,也可以使用实例本身的ifconfig

检查您的EC2安全组是否有端口3306打开至less您的IP。 如果它不添加,然后再试一次。

点击实例,然后在说明中,您将看到“安全组”,点击安全组名称,然后点击入站>编辑,您应该可以select打开端口。