通过rails中的另一个框(通过ssh?)连接到受保护的RDS(MySQL)实例

时间:2013-08-05 20:52:34

标签: mysql ssh proxy rds

我们在Amazon AWS上托管了一个只读的MySQL数据库(prod镜像)作为RDS实例。我想远程访问它,但为了安全起见,只能通过白名单从办公室网络访问它。

当我在办公室时,我只是将config/database.yml设置为指向镜子,一切都很好。

但是,即使不在办公室,我也需要访问它,而不会严重损害安全性。

办公室里有一个物理服务器,我有ssh(key)访问权限,我可以通过它直接访问数据库,但是我不知道如何让rails通过它连接,以便我实际上可以使用prod数据在我的笔记本电脑上加载页面(我无法在办公室服务器上运行rails)。

我已尝试通过端口3306的基本ssh隧道和一般代理(运行mac os x),但正如预期的那样都没有工作。我们没有vpn,目前我们无法设置。只要安全性不会受到损害,我们就可以更改我们的AWS配置,但理想的解决方案只涉及某种形式的隧道和database.yml

(目前不方便的解决方法是每当我需要进行远程工作时手动将ip添加到白名单,然后将其删除!)

1 个答案:

答案 0 :(得分:10)

通过ssh隧道建立数据库连接应该可行,我已多次使用它。在您的Rails配置中,请务必将主机设置为127.0.0.1 localhost,mysql驱动程序将采用不同的方式。

示例设置:

config/database.yml

development:
  adapter: mysql2
  database: yourdb
  username: user
  password: pass
  host: 127.0.0.1
  port: 8888

你的ssh命令:

ssh -v -L 8888:your-db-endpoint.rds.amazonaws.com:3306 ec2-user@ec2-instance.amazonaws.com

指定-v到ssh将在隧道使用时向您显示调试消息,这对于查看它是否有效非常有用。例如:

debug1: Connection to port 8888 forwarding to XXX.rds.amazonaws.com port 3306 requested.