如何通过 SSH 隧道打开端口?

如何通过 SSH 隧道打开端口?

有一个系统 B,其中有以下开放的服务器:我有一个监听端口 80 的 Web 服务器和一个监听端口 22 的 ssh 服务器。但是,只有端口 22 是公开的。现在,我想创建某种隧道,以便我可以从 A 访问 B:80。但是,我想要连接到系统 B 的客户端计算机 A 也不公开。

因此,我只有一台客户端计算机 A,我想从它访问服务器 B,并且那里有一个开放的端口 22。在 A 上,没有开放的端口或无法打开的端口。

我认为我需要的是在本地(在 A 上)打开某个端口,该端口以某种方式通过 B 的端口 22 连接到 B 的端口 80。

这可能不使用任何具有多个端口的中间人开放服务器吗?

答案1

(注:当我撰写答案时,Jakuje 回答了。从一开始它就更加详尽,所以我无论如何都会发布它。)


如果我理解正确的话,您只需要通过 SSH 转发本地端口。我假设您有 SSH 访问权限B

运行的Linux命令A

ssh -NL 2345:127.0.0.1:80 B

2345现在您可以连接到上的端口A,它应该相当于从本身连接到80上的端口。BB

几点说明:

  • -N导致ssh不在远程(B)端执行命令;非常适合端口转发。
  • 该数字2345是任意选择的;它可以是1024到之间的任何数字65535(通常绑定到低于的端口1024需要 root 访问权限)。如果您碰巧碰到了已经占用的端口,请尝试另一个数字。
  • 我使用的地址127.0.0.1要求您的 Web 服务器处于打开状态B以监听loopback接口。如果它仅监听其他地址,则改用它。此地址应是从系统内部看到的服务器的有效地址。此地址意味着什么,或者它是否意味着什么,根本B不重要。A
  • 如果您需要计算机C连接到2345转发端口,A那么您应该熟悉该ssh -g选项。阅读man ssh

答案2

使用本地端口转发:

ssh -L 80:localhost:80 B

然后连接到localhost:80。连接将被转发到B的端口 80

相关内容