渗透测试、驻场运维、红队打点,我们需要进行代理。但是代理只认 HTTP 请求,SSH 是二进制协议,看起来无解。但只要代理支持 CONNECT(HTTPS 代理的标准动作),我们就能让代理帮我们"打个洞"。

proxytunnel是一款把任意 TCP 连接伪装成 HTTPS 请求,塞进 HTTP 代理里运出去。

在Kali 默认安装,无需额外安装。执行下面命令,查看帮助。

proxytunnel -h

小试牛刀

接下来,我们通过几个小例子。简单来看看它的用法!

01 快速开始
当前,我无法直接连接192.168.50.44 这台机器,而是委托 192.168.50.157:8080 这台代理,让它替我在它和目标之间开一条 TCP 隧道,开好后把这条隧道接到我的终端上。命令如下:

proxytunnel -v -p 192.168.5.157:8080 -d 192.168.50.44:22

  • -p 本地(前置)代理
  • -d 最终目标
  • -v 打开详细日志

也就是说,我们通过192.168.5.157这台设备,作为跳板机,从而访问
192.168.50.44这台设备的22端口。

02 带代理认证
很多时候,为了代理安全,我们还可以给其添加密码。

proxytunnel -v -p 192.168.5.157:8080 -P kali:123456 -d 192.168.50.44:22

实测成功输出:

-> CONNECT 127.0.0.1:2222 HTTP/1.1
-> Host: 127.0.0.1:2222
-> Proxy-Authorization: Basic a2FsaToxMjM0NTY=
<- HTTP/1.1 200 Connection established
Tunnel established.

看到 Proxy-Authorization: Basic xxx 和 200 Connection established,隧道就成了。

03 给 SSH 当 ProxyCommand

proxytunnel 自己只是个"管道",你手动敲它没有意义。它的主战场是 OpenSSH 的 ProxyCommand。编辑 ~/.ssh/config:

Host jump-host
HostName 8.8.8.8
Port 443
User root
ProxyCommand proxytunnel -p 10.0.0.1:8080 -P kali:123456 -d %h:%p
ServerAliveInterval 30
ServerAliveCountMax 3

然后:

ssh jump-host

SSH 客户端会自己把 proxytunnel 拉起来当传输层,跟直连体验完全一样。

debug1: Executing proxy command: exec proxytunnel -p 127.0.0.1:8080 -P kali:123456 -d 127.0.0.1:2222
debug1: SSH2_MSG_KEXINIT sent

总结

Proxytunnel 没有服务端,也不需要公网机器,它是纯客户端工具。它做的是把一条 TCP 连接塞进 HTTP 代理的 CONNECT 里带出去——代理日志里只会留下一条到 443 的连接记录,看不出里面跑的是 SSH。这就是它在受限网络里好用的原因。

更多精彩文章 欢迎关注我们


本文首发于微信公众号,原文链接:内网称霸:一条命令学会穿墙

最后修改:2026 年 10 月 16 日
可怜可怜吧!正在沿街乞讨~