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

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

网络设置如下:

机器 A(我的电脑)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。

答案1

在机器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

因此,据我所知,没有办法做到这一点。如果您尝试通过 ssh 隧道连接,您将收到以下错误:

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

答案2

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

Host C
  ProxyCommand ssh -q B nc %h %p
  LocalForward 3306 localhost:3306
  Port 21343

Host B
  Hostname X.X.X.X  (ip of host B)

然后在 Assh C

然后在 A 上的另一个终端运行,mysql -h localhost 这将通过 ssh 端口转发将您连接到 C 上的 mysql。

答案3

你可能会考虑http://sourceforge.net/projects/portfwd/在机器 B 上,可能正在监听 TCP 22 以外的其他端口,以便 SSH 可以保留在机器 B 的标准端口上。

相关内容