ssh -d 是 linux 下轻量可靠的加密 socks5 代理方案,需配置本地监听、服务端 tcp 转发、autossh 保活、远程 dns 解析及各工具代理适配,否则易断连、泄露或失效。

ssh -D 命令就是你要用的核心命令
Linux 下最轻量、最可靠的加密 SOCKS5 代理,就是靠 ssh -D 实现的。它不依赖额外软件,不改系统代理设置,流量全程走 SSH 加密隧道,连中间网络设备都看不到你访问的真实域名和内容。
关键不是“能不能”,而是“怎么配才不卡、不断、不漏”:
-
ssh -D启动后默认只监听127.0.0.1:1080,浏览器或应用必须显式配置 SOCKS5 代理为这个地址,否则连不上 - 别用
-D 0.0.0.0:1080对外暴露——除非你真需要局域网其他设备共用,否则直接开在本地最安全 - 如果远程服务器禁用了 TCP 转发(
AllowTcpForwarding no),ssh -D会静默失败,只报channel_setup_fwd_listener_tcpip: cannot listen to port,得提前确认服务端配置
连接断开后代理自动失效,没有后台保活机制
ssh -D 是前台进程,关掉终端、网络抖动、SSH 超时都会让代理立刻不可用。这不是 bug,是设计使然——SSH 本就不提供长稳隧道语义。
要让它“像真正代理一样活着”,得加两层保障:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用
autossh替代ssh:装完后运行autossh -M 0 -N -D 1080 user@host,-M 0关闭监控端口(避免冲突),-N表示不执行远程命令,纯建隧道 - 加
ServerAliveInterval 30和ServerAliveCountMax 3到~/.ssh/config对应 Host 段,防止 NAT 或防火墙中途砍断空闲连接 - 别依赖 systemd 用户服务长期托管——
autossh在非交互 shell 下有时无法正确重连,建议用 tmux 或 screen 包一层再丢后台
浏览器或 curl 用代理时,DNS 查询可能绕过隧道
SOCKS5 本身支持远程 DNS 解析(即 socks5h:// 协议),但很多客户端默认走本地 DNS,导致域名泄露或被污染。
必须手动对齐行为:
- Firefox:设
network.proxy.socks_remote_dns = true(在about:config),否则 .onion 或内网域名解析失败 - cURL:用
curl --proxy socks5h://127.0.0.1:1080 https://example.com,注意是socks5h不是socks5 - Chrome / Edge:不支持远程 DNS,即使填了
127.0.0.1:1080,DNS 仍走本地,敏感场景慎用
别把 ssh -D 当成全局透明代理
它只是 SOCKS5,不是 TUN/TAP 设备,不能自动捕获所有进程流量。想让 wget、git、apt 全走代理,得逐个配置,而且效果不一:
-
wget --proxy=on --execute="https_proxy=socks5h://127.0.0.1:1080"—— 注意协议必须是socks5h -
git只支持 HTTP/HTTPS 代理,不原生支持 SOCKS,得用connect工具中转,比如git config --global core.sshCommand "connect -S 127.0.0.1:1080 %h %p" -
apt完全不认 SOCKS,强行设Acquire::http::Proxy会直接报错,只能换源或改用proxychains4(但会带来额外延迟和兼容问题)
真正麻烦的从来不是搭起来,而是哪些流量进了隧道、哪些没进、DNS 在哪解的——这些细节不盯住,加密就形同虚设。










