You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过命令行利用SSH隧道完整访问内网复杂网站

如何通过命令行利用SSH隧道完整访问内网复杂网站

这个问题我之前折腾过好多次,单纯用curl扒单个HTML文件确实只能看个骨架,图片、JS、CSS这些静态资源根本加载不出来。其实用SSH的隧道功能就能完美解决,给你两个最实用的命令行方案,按需选择就行:

方案一:SOCKS动态代理(适合访问多个内网站点)

这个方法相当于把Machine_A变成你的“内网网关”,浏览器所有请求都会通过它转发到内网,不管是哪个站点都能访问,非常灵活。

  1. 建立SSH SOCKS隧道
    在本地终端执行这条命令:
ssh -D 8080 -f -C -q -N Machine_A

给你解释下每个参数的作用:

  • -D 8080:开启动态SOCKS代理,本地的8080端口会接收请求,然后通过Machine_A转发
  • -f:让SSH在后台运行,不用一直占着终端
  • -C:压缩传输数据,速度会快一点
  • -q:安静模式,少输出日志信息
  • -N:不执行远程机器上的命令,只做隧道转发
  1. 配置浏览器使用代理
    你可以直接用命令行启动浏览器并指定代理,比如Chrome:
# Windows系统
chrome.exe --proxy-server="socks5://localhost:8080"

# macOS/Linux系统
google-chrome --proxy-server="socks5://localhost:8080"

也可以在浏览器的设置里手动配置SOCKS5代理,地址填localhost,端口填8080就行。这样浏览器打开http://192.168.0.51的时候,所有资源请求都会通过Machine_A转发到内网,完整加载整个网站。

方案二:本地端口转发(适合只访问单个内网站点)

如果你只需要访问http://192.168.0.51这一个站点,用端口转发更直接,相当于把内网站点映射到本地端口上。

  1. 建立端口转发隧道
    在本地终端执行:
ssh -L 8081:192.168.0.51:80 -f -C -q -N Machine_A

参数解释:

  • -L 8081:192.168.0.51:80:把本地的8081端口,映射到Machine_A能访问的192.168.0.51:80(内网站点的80端口)
  • 后面的-f/-C/-q/-N和方案一的作用一样
  1. 访问站点
    直接在浏览器里打开http://localhost:8081,就相当于直接访问内网的http://192.168.0.51了,所有静态资源都会自动加载,因为相对路径会对应到转发后的端口上。

一些注意事项

  • 确保Machine_A本身能正常访问内网的192.168.0.51,不然隧道建立了也没用
  • 如果本地的8080/8081端口被占用了,换成其他空闲端口就行,比如8082
  • 用完隧道后,可以用pkill -f "ssh -D 8080"或者pkill -f "ssh -L 8081"来关闭进程

备注:内容来源于stack exchange,提问作者Rodrigo

火山引擎 最新活动