SSH反向隧道连接时curl命令卡顿问题求助
问题分析与解决方案
你的核心问题是错误使用了SSH端口转发类型:你创建的是静态TCP端口转发(将服务器8888映射到工作站443),但尝试用SOCKS5协议连接这个端口,两者不匹配,导致curl无法获取SOCKS响应而卡顿。
正确操作步骤
1. 在macOS工作站创建反向动态SOCKS代理
替换原来的SSH命令为:
ssh -N -R 8888 -i [key_file] [user]@[server_ip]
-R 8888:让服务器监听本地8888端口,所有发往该端口的SOCKS请求会通过SSH隧道转发到你的工作站,再由工作站的网络访问目标地址。-N:仅建立隧道,不执行远程命令,保持会话后台运行。
2. 在服务器端执行curl请求
保持你的curl命令不变:
curl --proxy socks5://localhost:8888 'https://www.example.com'
原命令错误原因
你之前的命令ssh -N -R :8888:localhost:443 ...是静态TCP端口转发,它的作用是将服务器8888端口的所有TCP连接,直接转发到工作站的443端口。但你的工作站443端口并没有运行SOCKS5代理服务(默认443是HTTPS端口,通常无监听),所以当curl用SOCKS5协议连接服务器8888时,实际是和工作站的443端口通信,对方无法理解SOCKS协议,自然没有响应,导致无限卡顿。
额外检查项
- 确保macOS工作站的防火墙允许SSH出站连接(默认允许,若手动禁用需开启)。
- 服务器端
sshd_config中需确保AllowTcpForwarding yes(默认启用,若修改过需恢复),GatewayPorts无需设置为yes(因为你仅在服务器本地访问8888端口)。
内容的提问来源于stack exchange,提问作者Tyler Stone
相关产品推荐
相关产品推荐

