使用自定义主机名进行 ssh 端口转发

使用自定义主机名进行 ssh 端口转发

我经常使用以下命令进行端口转发来访问远程 Web 服务器:

ssh user@remotehost -L 1234:localhost:1234

所以现在我可以进入http://本地主机:1234在我的浏览器中访问远程主机的 Web 服务器。我现在想做的是使用 localhost 以外的名称。例如,是否可以使用一些参数调用 ssh,以便我可以输入http://远程别名:1234在我的浏览器中访问远程 Web 服务器?当我同时在本地计算机的端口 1234 上运行其他服务(并且不想记住许多端口:主机隧道映射)时,这特别有用。

如果单独使用 ssh 命令无法实现,我也对需要在我的计算机中编辑一些本地配置以使其按所述工作的解决方案感兴趣。

答案1

是的;您可以为本地机器上的每个主机创建一个 IP

ip address add 122.0.0.2/32 dev eth0
ip address add 122.0.0.3/32 dev eth0

并编辑你的主机文件

echo "127.0.0.2 remotehost1.com" >> /etc/hosts
echo "127.0.0.3 remotehost2.com" >> /etc/hosts

然后将每个 IP 转发到主机 IP(通过域直接访问将因主机文件更改而中断)

ssh user@$remotehost1_IP -L 127.0.0.2:80:localhost:1234
ssh user@$remotehost2_IP -L 127.0.0.3:80:localhost:1234

然后像平常一样使用您的网络浏览器

http://remotehost1.com
http://remotehost2.com

这将通过其自己的 ssh 隧道在其自己的本地 IP 上为每个远程 FQDN 建立隧道。

答案2

当你这样做时

ssh [email protected] -L 1234:localhost:5678

在主机 b.company.com 上,会发生以下情况:

  • 在主机B上,ssh开始监听1234端口。
  • localhost在主机 A 上,通过端口 5678 与(即再次主机 A)建立连接。
  • 这两个端点上的流量通过 A 和 B 之间的 ssh 连接转发。

所以最终的结果是可以通过主机B上的1234端口访问主机A上的5678端口。

您必须键入的原因localhost是因为主机 A 也可以是“跳转服务器”,即某个受保护网络的入口点。因此,如果您无法从主机 B 直接访问主机 C,但可以从主机 B 访问主机 A,并从主机 A 访问主机 C,您可以这样做

ssh [email protected] -L 1234:c.company.com:5678

这将在主机 B 和 A 之间以及主机 A 和 C 之间建立连接,并将主机 C 上的端口 5678 隧道连接到主机 A 上的端口 1234。

这有两个后果:

  • 如果您已将客户端(主机 B)上的端口 1234 用于其他服务,则无法将其用于隧道。您需要使用不同的端口(但有很多端口可供选择)。

  • 在您的浏览器中,您将始终连接到隧道的本地端点,即localhost。为远程主机分配名称不会改变这一点。

所以不,你想要的不是这样的。

编辑

如果还不够清楚:您可以非常轻松地使用不同的端口号来运行本地服务。因此,假设您希望通过这种方式访问​​主机 A、B 和 C,它们都在端口 80 上提供服务,并且您在端口 80 上运行您自己的 Web 服务器。然后您就可以

ssh user@hosta -L 5000:localhost:80
ssh user@hostb -L 5001:localhost:80
ssh user@hostc -L 5002:localhost:80

您现在可以通过在浏览器中输入http://localhost:5000http://localhost:5001和来访问它们http:/localhost:5002。并且http://localhost:80仍然会访问您自己的本地服务器。

并不真正需要复杂的构造,包括为自己分配大量的 IP 地址或远程别名。

答案3

当您通过 ssh 建立端口转发时 - 您在端口your_machine:port(从您的计算机的角度)与machine:port从您已连接的计算机的角度之间设置了一座桥。

换句话说 - 如果您调用命令

ssh user@remotehost -L 1234:localhost:4567

remotehost如果您连接到1234计算机上的端口(您的地址),则您将与 plus 建立 ssh 连接,localhost您的 ssh 连接的远程部分将尝试在端口上建立连接localhost(到其自身 - 因为localhostonremotehost将指向其自身)4567

回到问题的优点。

如果您的机器上的端口上有其他服务1234,您可以选择机器上可用的其他端口。

相关内容