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

Amazon RDS connection over SSH tunnel (no PEM key file due to provisioning with Laravel Forge)

我已经通过 forge 配置了一个 EC2 实例。执行此操作时,您没有机会下载 PEM 密钥。相反,我已将我的本地密钥添加到伪造的 SSH 配置中。

我现在可以使用 ssh forge@IPADDRESS 通过 SSH 连接到 EC2 实例 - 很好。

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

mysql -h RDSINSTANCE.ENDPOINT.eu-west-2.rds.amazonaws.com -u USERNAME -p
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 PORT:3307 用户:用户名 密码:密码

我从 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 支持人员似乎认为这是因为隧道设置不正确,但我不确定是否有其他方法。

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

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

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