Как создать туннель ssh в ruby, а затем подключиться к серверу mysql на удаленном хосте

Я хотел бы создать сценарий ruby, через который я могу запускать команды mysql на удаленном сервере. туннель ssh.

Прямо сейчас у меня есть ручной процесс, чтобы сделать это:

  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

Обновление - 10-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 строки, он просто зависает.

28
задан rm-rf 21 February 2011 в 05:18
поделиться