我们有一个只读的 MySQL 数据库(prod 镜像)作为 RDS 实例托管在 Amazon AWS 上。我想远程访问它,但为了安全起见,只能通过白名单从办公室网络访问它。
当我在办公室时,我只是将 config/database.yml
设置为指向 prod 镜像,一切都很好。
但是,即使不在办公室,我也需要访问它,而不会严重影响安全性。
办公室里有一台物理服务器,我可以通过 ssh( key )访问它,我可以通过它直接访问数据库,但我不确定如何让 Rails 通过它进行连接,这样我才能真正使用 prod 数据通过 rails 在我的笔记本电脑上加载一个页面(我无法在办公室服务器上运行 rails)。
我尝试了通过端口 3306 的基本 ssh 隧道和一般代理(运行 mac os x),但正如预期的那样,两者都不起作用。我们没有 vpn,目前无法设置。只要不损害安全性,我们就可以更改我们的 AWS 配置,但理想的解决方案只涉及某种形式的隧道和 futzing 与 database.yml
。
(目前不方便的解决方法是每当我需要进行远程工作时手动将ip添加到白名单,然后再将其删除!)
最佳答案
通过 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
为 ssh 指定 -v 将在使用隧道时向您显示调试消息,这对于查看它是否正常工作很有用。例如:
debug1: Connection to port 8888 forwarding to XXX.rds.amazonaws.com port 3306 requested.
关于mysql - 通过另一个盒子(通过 ssh?)从 rails 连接到 protected RDS(MySQL)实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067497/