2

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

当我在办公室时,我只需将config/database.ymlto 指向 prod 镜子,一切都很好。

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

办公室里有一台物理服务器,我可以通过 ssh(密钥)访问它,我可以通过它直接访问数据库,但我不知道如何让 rails 通过它进行连接,以便我可以实际加载页面在使用产品数据的带有导轨的笔记本电脑上(我无法在办公室服务器上运行导轨)。

我已经在端口 3306 上尝试了一个基本的 ssh 隧道和一般代理(运行 mac os x),但正如预期的那样,两者都不起作用。我们没有 vpn,目前无法设置。只要不损害安全性,我们愿意更改我们的 AWS 配置,但理想的解决方案只涉及某种形式的隧道和database.yml.

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

4

1 回答 1

10

通过 ssh 建立数据库连接应该可以工作,我已经使用过很多次了。在你的 Rails 配置中,一定要设置主机,127.0.0.1不是 localhostmysql 驱动程序会区别对待的主机。

示例设置:

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.
于 2013-08-31T14:03:35.773 回答