mysql - 通过另一个盒子(通过 ssh?)从 rails 连接到 protected RDS(MySQL)实例

标签 mysql ssh proxy rds

我们有一个只读的 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/

相关文章:

javascript - 谷歌浏览器是否有可用的代理对象 polyfill?

MYSQL - 将查找表列连接成一行

mysql - SSH 连接在 "enter password"之后卡住在 "watch mysqladmin"

javascript - 为什么这个nodejs代理服务器挂了?

bash - 从通过 post-receive 钩子(Hook)创建的 ssh session 调用时,导出不起作用

java - JSch sftp 上传/下载进度

postgresql - 是否有离线 postgres 代理工具/库?

mysql - 将所有表从MySQL导入到Hive。我的命令出了什么问题?

php - MySQL:摘录并将其复制到另一列

php - mysqli_insert_id 是否有可能在高流量应用程序中返回错误的 id?