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

avv*_*avv 2 mysql ssh proxy rds

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

当我在办公室时,我只是config/database.yml指向生产镜,一切都很好.

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

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

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

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

Gre*_*mpe 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
Run Code Online (Sandbox Code Playgroud)

你的ssh命令:

ssh -v -L 8888:your-db-endpoint.rds.amazonaws.com:3306 ec2-user@ec2-instance.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

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

debug1: Connection to port 8888 forwarding to XXX.rds.amazonaws.com port 3306 requested.
Run Code Online (Sandbox Code Playgroud)