有一个系统 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
上的端口。B
B
几点说明:
-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