如何通过命令行利用SSH隧道完整访问内网复杂网站
如何通过命令行利用SSH隧道完整访问内网复杂网站
这个问题我之前折腾过好多次,单纯用curl扒单个HTML文件确实只能看个骨架,图片、JS、CSS这些静态资源根本加载不出来。其实用SSH的隧道功能就能完美解决,给你两个最实用的命令行方案,按需选择就行:
方案一:SOCKS动态代理(适合访问多个内网站点)
这个方法相当于把Machine_A变成你的“内网网关”,浏览器所有请求都会通过它转发到内网,不管是哪个站点都能访问,非常灵活。
- 建立SSH SOCKS隧道
在本地终端执行这条命令:
ssh -D 8080 -f -C -q -N Machine_A
给你解释下每个参数的作用:
-D 8080:开启动态SOCKS代理,本地的8080端口会接收请求,然后通过Machine_A转发-f:让SSH在后台运行,不用一直占着终端-C:压缩传输数据,速度会快一点-q:安静模式,少输出日志信息-N:不执行远程机器上的命令,只做隧道转发
- 配置浏览器使用代理
你可以直接用命令行启动浏览器并指定代理,比如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这一个站点,用端口转发更直接,相当于把内网站点映射到本地端口上。
- 建立端口转发隧道
在本地终端执行:
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和方案一的作用一样
- 访问站点
直接在浏览器里打开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




