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

使用net/ssh/gateway建立到mysql的ssh隧道,mysql,ruby,tunnel,net-ssh,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@t

我试图通过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
它给了我这个错误消息。

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
我缺少什么?

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

在这种情况下,更等同于

ssh-L{port}:target.server:3306-Nuser@target.server

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

您可能想要:

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

相反,在这种情况下