通过SSH隧道的Amazon RDS连接(由于使用Laravel Forge进行配置,因此没有PEM密钥文件)

时间:2019-06-15 14:35:43

标签: amazon-web-services amazon-ec2 ssh amazon-rds ssh-tunnel

我已经通过伪造配置了EC2实例。这样做时,您没有机会下载PEM密钥。相反,我将本地密钥添加到了伪造的SSH配置中。

我现在可以使用ssh forge@IPADDRESS SSH进入EC2实例-一切正常。

我在同一VPC中设置了RDS实例。我已经从EC2实例对此进行了测试,并且可以:

  • 通过终端中的EC2实例连接到MySQL。使用:
mysql -h RDSINSTANCE.ENDPOINT.eu-west-2.rds.amazonaws.com -u USERNAME -p
  • 检查3306端口是否已通过telnet打开。
telnet RDSINSTANCE.ENDPOINT.eu-west-2.rds.amazonaws.com 3306

以上似乎暗示RDS实例与EC2实例具有连接。

我现在需要从笔记本电脑打开SSL隧道,以连接sequelpro。由于没有PEM文件,因此我使用以下命令打开了SSH隧道:

ssh -L 3307:FORGE-PRIVATE-IP:3306 forge@FORGE-PUBLIC-IP

这似乎工作正常。但是,当尝试通过带有设置的sequel pro连接到SQL时:

主机:127.0.0.1 端口:3307 使用者:USERNAME 密码:密码

我从seqelpro中收到以下错误:

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

并在终端的详细模式下:

debug1: Connection to port 3307 forwarding to 172.30.0.110 port 3306 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 3307 for 172.30.0.110 port 3306, connect from 127.0.0.1 port 56172 to 127.0.0.1 port 3307, nchannels 3

AWS支持似乎认为这是因为隧道设置不正确,但是我不确定其他任何方式。

1 个答案:

答案 0 :(得分:0)

我发现了问题。应当使用RDS端点而不是IP地址来设置ssh隧道:

ssh -L 3307: RDSINSTANCE.ENDPOINT.eu-west-2.rds.amazonaws.com:3306 forge@FORGE-PUBLIC-IP

EC2实例和RDS实例之间的VCS上的安全规则应使用私有IP。即RDS入站安全组允许来自EC2专用IP的MySQL / Aurora。