gpt4 book ai didi

mysql - 如何在 ruby​​ 中创建 ssh 隧道,然后连接到远程主机上的 mysql 服务器

转载 作者:IT老高 更新时间:2023-10-28 23:44:40 26 4
gpt4 key购买 nike

我想创建一个 ruby​​ 脚本,我可以通过 ssh 隧道在远程服务器上运行 mysql 命令。

现在我有一个手动过程来执行此操作:

  1. 创建隧道 -> ssh -L 3307:127.0.0.1:3306
  2. 运行 ruby​​ 脚本。
  3. 关闭隧道。

我希望能够自动执行此操作,以便我可以运行脚本。

示例:

require 'rubygems'   
require 'net/ssh/gateway'
require 'mysql'


#make the ssh connection -> I don't think I am doing this right.

Net::SSH.start('server','user') do |session|

session.forward.local(3307,'127.0.0.1', 3306)<br>
mysql = Mysql.connect("127.0.0.1","root","","",3307)

dbs = mysql.list_dbs<br>
dbs.each do |db|<br>
puts db <br>
end

session.loop(0){true}<br>
end

更新 - 2010-11-10:
我真的很接近这段代码:

require 'rubygems'  
require 'mysql'
require 'net/ssh/gateway'

gateway = Net::SSH::Gateway.new("host","user",{:verbose => :debug})
port = gateway.open("127.0.0.1",3306,3307)

# mysql = Mysql.connect("127.0.0.1","user","password","mysql",3307)
# puts "here"
# mysql.close

sleep(10)
gateway.close(port)

当它休眠时,我可以打开一个终端窗口并连接到远程主机上的 mysql。这将验证隧道已创建并正在运行。

现在的问题是,当我取消注释 3 行时,它就挂起。

最佳答案

我能够使用 mysql2 gem 在没有 fork 的情况下让它工作

require 'rubygems'
require 'mysql2'
require 'net/ssh/gateway'

gateway = Net::SSH::Gateway.new(
'remotehost.com',
'username'
)
port = gateway.open('127.0.0.1', 3306, 3307)

client = Mysql2::Client.new(
host: "127.0.0.1",
username: 'dbuser',
password: 'dbpass',
database: 'dbname',
port: port
)
results = client.query("SELECT * FROM projects")
results.each do |row|
p row
end
client.close

关于mysql - 如何在 ruby​​ 中创建 ssh 隧道,然后连接到远程主机上的 mysql 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com