1

我正在尝试通过 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

我错过了什么?

4

1 回答 1

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|

而在这种情况下。

于 2013-02-14T17:17:15.573 回答