用 SSH 创建本地 SOCKS 代理
使用 OpenSSH 在 127.0.0.1 上动态转发,会话期间保持进程运行,并区分监听成功与目标可达。
拥有服务器的授权 SSH 访问权限后,可以用 OpenSSH 在自己的电脑上创建 SOCKS 监听端。SSH 连接承载转发流量,远程服务器负责连接目标。
仅监听回环地址
ssh -N -T -o ControlPath=none -o ForkAfterAuthentication=no -o ExitOnForwardFailure=yes -D 127.0.0.1:1080 [email protected]
替换账户和主机名。SSH 服务器必须允许转发;管理员可以独立于账户登录权限,限制转发和目标。
-D 创建动态转发,明确指定回环地址会把监听端限制在本机。-N 不执行远程命令;-T 不分配伪终端。ControlPath=none 避免使用已有的共享主连接,ForkAfterAuthentication=no 则让本次调用保持在前台。
使用代理期间保持进程运行。如果端口 1080 已占用,请改用另一个未占用的高位端口,并更新客户端设置。ExitOnForwardFailure=yes 会在无法创建监听端时让 SSH 退出。
使用 SOCKS 端点
curl --proxy socks5h://127.0.0.1:1080 --noproxy '' --connect-timeout 5 --max-time 15 https://example.com/
这个请求通过 SOCKS5 委托处理目标名称。其他应用需要各自配置 SOCKS;HTTP 代理字段无法向这个监听端发送 SOCKS 协议。
查看端口属于哪个进程:
ss -ltnp 'sport = :1080'
预期的 SSH 进程应拥有一个回环监听端。通过它发送请求,才能检查远程服务器是否也能到达目标。需要检查出口时,请使用由自己控制的目标来观察出口地址。
会话生命周期
Ctrl-C 会关闭 SSH 进程、监听端和转发连接。SSH 连接断开同样会使代理不可用。
ExitOnForwardFailure 检查的是建立阶段。它不会在每次后续目标连接失败时终止 SSH,因此应分别排查会话、本地端口和目标请求。