【发布时间】:2011-05-05 11:10:34
【问题描述】:
我想创建一个 ruby 脚本,我可以通过 ssh 隧道在远程服务器上运行 mysql 命令。
现在我有一个手动过程来执行此操作:
- 创建隧道 -> ssh -L 3307:127.0.0.1:3306
- 运行 ruby 脚本。
- 关闭隧道。
我希望能够自动执行此操作,以便我可以运行脚本。
示例:
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 行时,它就挂起。
【问题讨论】: