Windows下用Socat通过HTTP代理SSH报错CreateProcessW error:2排查
问题原因及修复方案
错误根源
CreateProcessW failed error:2 本质是Windows版OpenSSH无法正确解析你设置的ProxyCommand,核心问题有两个:
引号与命令行解析逻辑冲突
Windows的cmd/PowerShell对引号的处理和Linux环境不同,你用单引号包裹ProxyCommand内容的写法,会导致SSH客户端无法正确识别socat的可执行文件路径。Socat的PROXY参数格式不兼容Windows
原命令中PROXY:%h:%p|tcp:y.y.y.y:8080里的管道符|是Windows命令行的特殊字符,会被系统提前拦截解析,无法传递给socat执行。
修正后的可用命令
PowerShell环境
ssh -o ProxyCommand="C:\Users\MyUser\Download\socat\socat.exe - PROXY:%h:%p,proxyaddr=y.y.y.y,proxyport=8080" -p 443 x.x.x.x
CMD环境
ssh -o ProxyCommand="C:\\Users\\MyUser\\Download\\socat\\socat.exe - PROXY:%h:%p,proxyaddr=y.y.y.y,proxyport=8080" -p 443 x.x.x.x
关键调整说明
- 用双引号包裹整个
ProxyCommand内容,适配Windows命令行的引号解析规则 - 将socat的PROXY参数改为逗号分隔格式(
proxyaddr=和proxyport=),替代管道符写法,避免特殊字符冲突 - 使用Windows原生的路径分隔符
\,CMD环境下需要用双反斜杠\\转义 - 显式指定
-p 443,确保连接到远程主机的正确SSH端口
内容的提问来源于stack exchange,提问作者ZioG
相关产品推荐
相关产品推荐

