mysql - 如何配置 Rails 以实现对远程数据库的无密码访问

标签 mysql ruby-on-rails ruby ssh

注意:这类似于 Use Ruby on Rails and SSH to access remote MySQL database on remote server ,但 OP 没有提供太多信息,并且给出的唯一答案没有回答问题。

背景

我们最近将远程数据库从密码身份验证切换为基于 ssh key 的身份验证。我已经验证我可以通过优雅的 Sequel Pro 访问数据库。具有以下设置的图形数据库客户端(某些名称故意混淆):

MySQL Host: woofwoof.us-west-2.rds.amazonaws.com
Username:   bowser
Database:   canine
Port:       3306

SSH Host:   salt.woofwoof.com
SSH User:   guardian
SSH Key:    ~/.ssh/id_rsa

现在我需要 Rails 连接到同一个数据库,同样使用基于 ssh key 的身份验证。

问题

我的 config/database.yml 文件中有什么内容?

到目前为止我有:

canine:
    adapter: mysql2
    database: canine
    username: bowser
    host: woofwoof.us-west-2.rds.amazonaws.com
    port: 3306

...但是如何在 config/database.yml 中指定 SSH HostSSH UserSSH Key 文件?

附加信息

当我们的数据库有密码验证时,以下工作:

canine:
    adapter: mysql2
    database: canine
    username: bowser
    password: *secret*
    host: woofwoof.us-west-2.rds.amazonaws.com
    port: 3306

最佳答案

首先,您需要在 MySQL 服务器上建立 SSH 隧道。在客户端机器上,运行:

ssh -fNg -L 3307:127.0.0.1:3306 guardian@salt.woofwoof.com

这将建立到 salt.woofwoof.com 服务器的 SSH 隧道。任何到本地主机端口 3307 的连接都将通过隧道发送到端口 3306 上的远程主机。

然后像本地连接一样配置 database.yml,但指定转发端口 3307:

canine:
  adapater: mysql2
  database: canine
  username: bowser
  password: *secret*
  port: 3307

您可能还想将 ssh 隧道设置添加到/etc/inittab,以便在引导后建立隧道。参见 http://chxo.com/be2/20040511_5667.html举一个如何做到这一点的例子。

关于mysql - 如何配置 Rails 以实现对远程数据库的无密码访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774264/

相关文章:

MySQL - 全文索引搜索问题

ruby-on-rails - rails : update_attributes not updating all attributes

ruby-on-rails - 从 Rails 中的其他模型访问属性

ruby - 在负面前瞻中使用不情愿的量词时引擎之间的不一致

mysql - 我应该在删除行之前每次都使用 MySQL TRIGGER 语句吗?

Mysql 5.5/phpmyadmin 简单查询之谜

javascript - Rails 页面特定的 JavaScript : What's the best practice?

mysql - "Host ' 192.XXX.XXX.X ' is not allowed to connect to this MySQL server"尝试从另一个容器访问 mysql Docker 容器时出错

ruby - 有没有办法重构这段代码?

java - MySQL/Hibernate SQLQuery 如何将 unsigned int(10) 转换为smallint?