使用net/ssh/gateway建立到mysql的ssh隧道
我试图通过ssh建立到远程服务器的隧道,然后使用转发端口访问MySQL 我现在就这样使用它使用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
$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 |
相反,在这种情况下