我正在尝试通过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
我错过了什么?
答案 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|