我对网络还很陌生,正在尝试了解 SSH。
我有这个设置
设备A
:在静态上提供 Web 应用程序192.X.X.X
设备B
:可以通过以下方式访问 Web 应用192.X.X.X
设备C
:已连接B
但位于不同的网络上10.X.X.X
,只能通过 SSH 连接到B
现在我的问题是,我能否以某种方式将 HTTP 流量192.X.X.X
从隧道传输B
到C
,或者这是否可能。
也就是说,我可以在浏览器中输入C
IP 并查看 Web 应用程序,就像在B
答案1
是的,使用-L
参数将本地套接字转发到远程套接字。
例如,在主机 C 上运行以下命令:
ssh -L "${LOCAL_PORT}:${REMOTE_HOST}:${REMOTE_PORT}" "${HOST_B}"
然后,在主机 C 上导航到http://localhost:${LOCAL_PORT}/
(或https://
根据情况)。
如果您需要从主机 C 网络上的另一台设备访问此服务,那么您也可以提供参数-g
,这将允许其他主机也进行连接(即:绑定到0.0.0.0
而不是默认的127.0.0.1
)。请注意,这是未经身份验证的,可能会对您的用例造成安全风险。例如:
ssh -gL "${LOCAL_PORT}:${REMOTE_HOST}:${REMOTE_PORT}" "${HOST_B}"
在上面的例子中,替换变量如下:
${LOCAL_PORT}
:如果您没有权限,请选择 1024 以上的端口,选择常用端口可能会导致主机 C 上已运行的服务出现问题${REMOTE_HOST}
:主机 A 的 IP 或名称${REMOTE_PORT}
:主机A上运行的服务的端口