这是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的标准端口上。