【问题标题】:Ruby: How do I return a MySQL query up an SSH tunnel?Ruby:如何通过 SSH 隧道返回 MySQL 查询?
【发布时间】:2013-10-17 22:25:23
【问题描述】:

//更新:输入 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 服务器的机器与我访问它的机器不同,而这又不是我实际坐的机器。我需要把这些点联系起来,显然不知道如何正确处理。

任何提示将不胜感激。

【问题讨论】:

  • 我唯一的提示是您的问题不是端口转发。
  • 没关系。显然问题出在语法上。我在脚本中的 -p 和密码之间有一个空格 -_- $%^&。出色地。希望我有五个小时回来。
  • 如果您认为它与其他用户无关,也许可以删除您的问题?
  • @MaxwellEvans 您应该将其发布为答案
  • 请,不要这样做。从命令行运行 SQL 是鲁莽的。利用结果也将是地狱。

标签: mysql ruby ssh


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 2018-10-06
    • 2012-06-19
    • 2022-01-03
    • 1970-01-01
    • 2015-12-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多