使用net / ssh / gateway建立到mysql的ssh隧道

时间:2013-02-14 16:23:56

标签: mysql ruby tunnel net-ssh

我正在尝试通过ssh建立到远程服务器的隧道,然后使用转发端口访问MySQL。

我现在正在使用它

$gateway = Net::SSH::Gateway.new('target.server', 'user')

def with_gateway
  $gateway.open("target.server", 3306) do |port|
    yield port
  end
end

在我看来,这与此类似......

`ssh -L #{port}:localhost:3306 -N user@target.server`

然后当我尝试使用它并做这样的事情时。

with_gateway do |port|
  puts `mysql -u user -ppass -h 127.0.0.1 -P #{port} -e SHOW\ DATABASES\;`
end

它给了我这条错误消息..

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

我错过了什么?

1 个答案:

答案 0 :(得分:2)

$gateway.open("target.server", 3306) do |port|

在这种情况下,

更等同于

ssh -L #{port}:target.server:3306 -N user@target.server

如果您的mysql服务器只侦听127.0.0.1(或内部IP地址,或防火墙只允许通过内部网络连接,所有这些都是合理且正常的配置),这可能会失败。

可能你想要:

$gateway.open("127.0.0.1", 3306) do |port|

相反,在这种情况下。