Linux下用ssh动态端口转发搭建SOCKS代理,核心是启动本地SOCKS服务并经远程服务器中转流量,命令为ssh -D [绑定地址:]端口 用户名@远程主机,支持后台运行、保活及自动重连。

Linux 下用 ssh 动态端口转发搭 SOCKS 代理,核心就是启动一个本地 SOCKS 服务,所有走它的流量经由远程服务器中转,不需预设目标地址,协议自动识别。
命令格式与基础用法
执行一条简单命令即可启动:
- ssh -D [绑定地址:]端口 用户名@远程主机
- 例如:
ssh -D 1080 user@server.example.com,会在本机 1080 端口启动 SOCKS5 代理 - 加
-N表示不执行远程命令,纯做转发;加-f让 ssh 后台运行;加-q减少输出噪音 - 默认监听
127.0.0.1,如需局域网其他设备使用,写成-D 0.0.0.0:1080,但要确保远程服务器的sshd_config中GatewayPorts yes已启用
验证代理是否生效
启动后别急着配浏览器,先快速测试:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 用 curl 测试:运行
curl --socks5-hostname 127.0.0.1:1080 https://httpbin.org/ip,返回的 IP 应是远程服务器的出口 IP - 检查端口监听:
ss -tlnp | grep :1080或netstat -tlnp | grep :1080,确认 ssh 进程在监听 - 若连接超时,检查远程主机是否允许 TCP 转发(
/etc/ssh/sshd_config中AllowTcpForwarding yes)并已重载 sshd
客户端配置 SOCKS 代理
不是所有程序都原生支持 SOCKS,但主流工具基本可用:
-
Firefox / Chrome(配合插件如 SwitchyOmega):设置代理类型为 SOCKS5,地址
127.0.0.1,端口1080;勾选“远程 DNS 解析”(防止 DNS 泄露) -
终端命令临时走代理:用
export ALL_PROXY=socks5://127.0.0.1:1080,之后的 curl、wget 等会自动走隧道 -
Git / apt 等工具:需单独配置,例如 Git 可设
git config --global core.sshCommand "ssh -o ProxyCommand='nc -X 5 -x 127.0.0.1:1080 %h %p'"
保持稳定与简单维护
生产环境建议加健壮性参数:
- 加入心跳保活:
-o ServerAliveInterval=30 -o ServerAliveCountMax=3,避免连接空闲断开 - 用 autossh 替代原生命令可自动重连,安装后运行:
autossh -M 0 -D 1080 -N -f user@server.example.com - 脚本化管理:把 ssh 命令写入 shell 脚本,加上端口检测和重连逻辑,比手动启停更可靠










