我们在Amazon AWS上托管了一个只读的MySQL数据库(prod镜像)作为RDS实例。我想远程访问它,但为了安全起见,只能通过白名单从办公室网络访问它。
当我在办公室时,我只是将config/database.yml
设置为指向镜子,一切都很好。
但是,即使不在办公室,我也需要访问它,而不会严重损害安全性。
办公室里有一个物理服务器,我有ssh(key)访问权限,我可以通过它直接访问数据库,但是我不知道如何让rails通过它连接,以便我实际上可以使用prod数据在我的笔记本电脑上加载页面(我无法在办公室服务器上运行rails)。
我已尝试通过端口3306的基本ssh隧道和一般代理(运行mac os x),但正如预期的那样都没有工作。我们没有vpn,目前我们无法设置。只要安全性不会受到损害,我们就可以更改我们的AWS配置,但理想的解决方案只涉及某种形式的隧道和database.yml
。
(目前不方便的解决方法是每当我需要进行远程工作时手动将ip添加到白名单,然后将其删除!)
答案 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.