我经常使用以下命令进行端口转发以访问远程 Web 服务器:
ssh user@remotehost -L 1234:localhost:1234
所以现在我可以在浏览器中输入http://localhost:1234来访问远程主机的 Web 服务器。我现在要做的是使用 localhost 以外的名称。例如,是否可以使用一些参数调用 ssh,以便我可以在浏览器中输入http://remotealias:1234来访问远程 Web 服务器?当我同时在端口 1234 上的本地计算机上运行其他服务时(并且不想记住许多端口:主机隧道映射),这特别有用。
如果单独使用 ssh 命令不可能,我也对需要在我的机器中编辑一些本地配置以使其按描述工作的解决方案感兴趣。
是的; 您可以在本地机器上为每个主机创建一个 IP
并编辑您的主机文件
然后将每个 IP 转发到主机 IP(通过域的直接访问将被主机文件更改破坏)
然后像平常一样使用您的网络浏览器
这将通过它自己的 ssh 隧道在它自己的本地 IP 上为每个远程 fqdn 建立隧道。
当你这样做
在主机 b.company.com 上,会发生以下情况:
localhost
上,通过端口 5678 与(即再次连接主机 A)建立连接。所以最终的结果是你可以使用主机 B 上的 1234 端口访问主机 A 上的 5678 端口。
您必须输入的原因
localhost
是主机 A 也可以是“跳转服务器”,即某个受保护网络的入口点。所以如果你不能直接从主机B访问主机C,但是你可以从主机B访问主机A,从主机A访问主机C,你可以这样做它将在主机 B 和 A 之间以及主机 A 和 C 之间建立连接,并将主机 C 上的端口 5678 连接到主机 A 上的端口 1234。
这有两个后果:
如果您已经在客户端(主机 B)上将端口 1234 用于其他服务,则不能将其用于隧道。您需要使用不同的端口(但有很多可供选择)。
在您的浏览器中,您将始终连接到隧道的本地端点,即
localhost
. 为远程主机分配名称不会改变这一点。所以不,你想要的不是这样工作的。
编辑
如果还不够清楚:您可以很容易地使用不同的端口号,因为您已经在运行本地服务。所以假设你有你想通过这种方式访问的主机 A、B 和 C,它们都在端口 80 上提供服务,并且你在端口 80 上运行你自己的 Web 服务器。然后你做
您现在可以在浏览器中通过键入
http://localhost:5000
、http://localhost:5001
和来访问它们http:/localhost:5002
。并且http://localhost:80
仍将访问您自己的本地服务器。没有真正需要涉及为自己分配大量 IP 地址或远程别名的复杂结构。
当您通过 ssh 建立端口转发时 - 您在端口
your_machine:port
(从您的机器machine:port
的角度)与您已连接到的机器的角度之间建立了一座桥梁。换句话说 - 如果你调用命令
ssh user@remotehost -L 1234:localhost:4567
如果您连接到计算机上的端口(为您提供地址),您将与
remotehost
plus建立 ssh 连接,您的 ssh 连接的远程部分将尝试在端口上建立连接(到自身 - 因为on将指向自身)1234
localhost
localhost
localhost
remotehost
4567
回到问题的优点。
如果您
1234
的机器上的端口上有其他服务,则可以改为选择机器上空闲的另一个端口。