使用SSH将端口3306从防火墙机器转发到桌面?

这是networking设置:

机器A(我的PC)SSH 22 =>机器B(具有root访问权限的Linode)SSH 21343 =>机器C(MySQL服务器)。

我想将端口3306从C通过B转发给A,所以我可以使用A上的SQL Workbench在C上执行命令。

请注意,C只能通过SSH端口21343访问,并且只能从B(我们不能更改C上的防火墙来打开更多的端口,但我们可以更改它的SSH设置)。

这可能吗? 我读过关于隧道和ProxyCommand。 但是我需要一个简单的分步示例。

所有机器都是Debian Lenny。

在机器上A:

 ssh -L 3307:C:3306 user@B 

这分配一个套接字侦听A上的端口3307.并且每当连接到这个端口时,它就通过ssh隧道转发到C:3306。

然后你可以连接到C上的MySQL服务器:

 mysql -u <user> -p -h 127.0.0.1 -P 3307 

(127.0.0.1通过TCP / IP而不是套接字连接)


不,我无法从B连接到C上的MySQL。只有在21343上的SSH侦听对B开放。

如果C上的防火墙只允许从本地主机连接,如下所示:

 iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP 

所以,AFAIK,没有办法做到这一点。 如果你尝试通过SSH隧道连接,你会得到下面的错误:

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

机器A上的〜/ .ssh / config如下所示:

 Host C ProxyCommand ssh -q B nc %h %p LocalForward 3306 localhost:3306 Port 21343 Host B Hostname XXXX (ip of host B) 

然后在A ssh C

并在另一个terminal上运行mysql -h localhost这样就可以把你通过ssh连接到C上的mysql端口了。

您可能会考虑一些与计算机B上的http://sourceforge.net/projects/portfwd/有关的内容,可能会听取TCP 22以外的内容,以便SSH可以保留在机器B的标准端口上。