注意:这类似于https://stackoverflow.com/questions/22923814/use-ruby-on-rails-and-ssh-to-access-remote-mysql-database-on-remote-server,但是OP没有提供太多的信息,唯一的答案是没有回答问题。
背景
最近,我们将远程数据库从密码身份验证转换为基于ssh密钥的身份验证。我已经验证,我可以通过优雅的续集Pro图形db客户机访问数据库,设置如下(有些名称有意混淆):
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密钥的身份验证。
问题是
我的config/database.yml文件里有什么?
到目前为止,我已经:
canine:
adapter: mysql2
database: canine
username: bowser
host: woofwoof.us-west-2.rds.amazonaws.com
port: 3306..。但是,如何在SSH Host文件中指定SSH User、SSH User和SSH Key?
附加信息
当我们的数据库具有密码身份验证时,以下操作有效:
canine:
adapter: mysql2
database: canine
username: bowser
password: *secret*
host: woofwoof.us-west-2.rds.amazonaws.com
port: 3306发布于 2014-11-06 18:50:03
首先,需要建立一个SSH隧道-- MySQL服务器。在客户端计算机上,运行:
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,以便在引导后建立隧道。有关如何执行此操作的一个示例,请参阅5667.html。
发布于 2020-03-04 11:12:03
还有一种纯rails解决方案。
将以下内容添加到Gemfile中
gem 'net-ssh-gateway'然后创建一个类
module RemoteConnectionManager
SSH_USER = 'YOUR_SSH_USER'
def self.port_through_tunnel(remote_host, port, local_port: nil, db_host:'localhost')
return Net::SSH::Gateway.new(remote_host, SSH_USER)
.open(db_host,port,local_port)
end
end最后一次更改database.yml
adapter: mysql2
host: 127.0.0.1
port: <%= RemoteConnectionManager.port_through_tunnel('your_ssh_host', 3306, db_host: 'your_db_host_eg_some_aws_rds_db' ) %>
username: your_db_username
password: your_db_password
database: your_db_name如果local_port是0,Net/ssh将选择一个免费的
https://stackoverflow.com/questions/26774264
复制相似问题