Comment créer un tunnel ssh en ruby et puis se connecter au serveur mysql sur l'hôte distant

Je voudrais créer un script ruby que je peux exécuter les commandes mysql sur un serveur distant à travers un tunnel ssh.

Droit maintenant, j'ai un processus manuel pour ce faire:

  1. Créer un tunnel -> ssh-L 3307:127.0.0.1:3306
  2. exécuter des scripts ruby.
  3. À proximité du tunnel.

J'aimerais être capable d'automatiser ce donc je ne peux il suffit d'exécuter le script.

exemple:

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

Une mise à jour - 2010-11-10:

Je suis vraiment très proche de ce code:

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)

Lors de son sommeil, je suis en mesure d'ouvrir une fenêtre de terminal et de se connecter à mysql sur l'hôte distant. Ceci vérifie le tunnel est créé et de travail.

Le problème maintenant, c'est quand je décommentez les 3 lignes, il se bloque.

InformationsquelleAutor user498023 | 2010-11-05