我可以使用 SSH 在本地网络上提供隧道资源(HTML 页面)吗?

我可以使用 SSH 在本地网络上提供隧道资源(HTML 页面)吗?

我有一个远程托管资源 (webapp),必须将其隧道传输到服务器才能进行远程访问。我可以使用 完成本地端口转发命令,然后在浏览器中-L访问远程资源。localhost:port

为了简单和持久,我想通过隧道进入远程主机(使用我的密钥通过 SSH),但在本地提供网页,以便我可以使用本地网络上的不同计算机访问它。

例如:

Old way:
Remote-server  --|SSH_Tunnel|--  Local-host:port

New way:
Remote-server  --|SSH_Tunnel|--  Local-host:port || local-net:port == local_http-traffic == different-local-computer

答案1

总结一下?使用ssh -g …


我认为你使用的命令是这样的

ssh -L 1234:server:5678 ssh_server

这将在本地监听127.0.0.1:1234(IPv4) 和(IPv6)。与这些地址中的任何一个的本地连接都将从到达。LAN 上的其他计算机无法到达隧道,因为和是环回地址;对于任何机器来说,它们都是指机器本身。[::1]:1234server:5678ssh_server127.0.0.1[::1]

要使隧道可供其他计算机使用,请将其绑定到它们可以访问的地址。假设192.168.0.14是运行的客户端的有效地址ssh;绑定到它:

ssh -L 192.168.0.14:1234:server:5678 ssh_server

或所有可用地址(选择一个命令):

ssh -L 0.0.0.0:1234:server:5678 ssh_server                            # IPv4
ssh -L [::]:1234:server:5678 ssh_server                               # IPv6
ssh -L 0.0.0.0:1234:server:5678 -L [::]:1234:server:5678 ssh_server   # IPv4 and IPv6

后者最“开放”的隧道也可以用 创建-g。从man 1 ssh

-g允许远程主机连接到本地转发端口。

-g相当于文件中的设置-o GatewayPorts=yes。此摘录自GatewayPorts yesssh_configman 5 ssh_config解释得更好:

GatewayPorts
指定是否允许远程主机连接到本地转发端口。默认情况下,ssh(1)将本地端口转发绑定到环回地址。这可防止其他远程主机连接到转发端口。GatewayPorts 可用于指定应将本地端口转发ssh绑定到通配符地址,从而允许远程主机连接到转发端口。参数必须是yesno。默认值为no

所以:

ssh -g -L 1234:server:5678 ssh_server

笔记:

  • 不要忘记在防火墙上打开所选的端口。
  • 你可能会发现autossh有用…
  • …以及ExitOnForwardFailure选项ssh(解释于man 5 ssh_config)。
  • 通常,HTTP 服务器可能会拒绝它认为不是自己的 URL。您说的 URLlocalhost:port在浏览器中有效。如果像 URL 这样的 URLhttp://192.168.0.14:1234尽管有隧道却不起作用,请检查服务器设置。

其他资源:

相关内容