Я хотел бы создать скрипт ruby, который бы мог запускать команды mysql на удаленном сервере через туннель ssh.
Сейчас у меня есть ручной процесс, чтобы сделать это:
- Создать туннель -> 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 строки, он просто зависает.