Ruby:如何通过SSH隧道返回MySQL查询?

时间:2013-10-17 07:37:06

标签: mysql ruby ssh

// update:在提供mysql密码时,-ppassword有效。 -p密码不起作用。问题解决了.//

我们的工作服务器上有数百个数据库,我想编写一个ruby脚本,自动在本地计算机上创建它们的重复版本以进行开发。

我一直在尝试使用net-ssh来创建隧道,但是(主机,用户,传递等因为显而易见的原因而被审查):

require 'net/ssh'

HOST = 'xxx'
USER = 'yyy'
PASS = 'ppp'

Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
    puts "inside ssh tunnel"
    puts ssh.exec!('ruby -v')
    puts ssh.exec!('mysql -u zzz -p pswrd -h c3 will_il_raw -e "select * from deeds limit 1"')
end

导致输出:

inside ssh tunnel
ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]

然后无限期挂起。有趣的是,如果我通过控制台ssh到同一台计算机,'ruby -v'返回1.9.3。如果我在那里输入那个mysql查询,它会成功返回指定表的一行。

我认为解决方案与端口转发有关,但在这里,我的有限知识开始让我彻底失败。

运行mysql服务器的机器与我从它访问的机器不是同一台机器,而不是我实际坐在那里的机器。我需要连接点,显然不知道如何妥善处理。

非常感谢任何支持。

1 个答案:

答案 0 :(得分:0)

在MySQL语法中,使用-p [password]提供密码时,-p和密码之间没有空格。

因为脚本的语法版本有空格,所以查询的结果是提示请求密码,这导致挂起在SSH隧道的远端。