运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案
运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案
问题描述
在 Windows 系统上运行codex命令登录时,出现以下报错:
Error logging in: failed to start login server 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013)输入codex回车后,浏览器打开 OAuth 认证页面,但终端一直卡在"等待登录完成",最终超时报出os error 10013套接字权限错误。
原因分析
Codex CLI 的登录机制是:在本地127.0.0.1:1455启动一个临时 HTTP 服务器,监听浏览器 OAuth 回调。但 Windows 系统的Hyper-V、WSL、或 Windows 网络地址转换服务 (WinNAT)会动态保留一段端口范围(通常是 1024-2000),恰好包含了 1455 端口。
即使端口空闲没有被任何进程占用,Windows 也会因为端口保留策略拒绝 Codex 绑定该端口,报出os error 10013(WSAEACCES - 权限被拒绝)。
可以通过以下命令验证:
# 查看被系统保留的端口范围 netsh interface ipv4 show excludedportrange protocol=tcp输出示例:
协议 tcp 端口排除范围 开始端口 结束端口 ---------- -------- 1455 1555 ← 1455 端口被排除解决方案
方案一:调整 Windows 端口排除范围(推荐)
步骤1:以管理员身份打开 PowerShell,停止相关服务
# 停止 WinNAT 服务(Windows 网络地址转换) net stop winnat  # 停止 Hyper-V 主机计算服务 net stop vmms # 如果有 Docker Desktop,也停掉 net stop com.docker.service步骤2:重新设置端口排除范围
# 将动态端口排除范围设为从 1555 开始,释放 1455 端口 netsh int ipv4 set dynamicport tcp start=1555 num=64000 # 如果是 IPv6 也存在相同问题 netsh int ipv6 set dynamicport tcp start=1555 num=64000步骤3:恢复服务
net start winnat net start vmms步骤4:重新登录 Codex
codex此时浏览器 OAuth 回调会正常被 1455 端口接收,登录成功。
方案二:停用 Hyper-V(如果不需要)
如果你的电脑不需要使用 WSL2、Docker Desktop、虚拟机等功能,可以直接关闭 Hyper-V:
# 以管理员身份运行 dism.exe /Online /Disable-Feature:Microsoft-Hyper-V-All # 重启电脑后生效 shutdown /r /t 0重启后重新运行codex即可正常登录。
方案三:使用 WSL2 环境登录(曲线救国)
如果你不能修改系统端口配置,可以通过 WSL2 内的 Linux 环境来运行 Codex:
# 在 WSL2 中安装 Codex npm install -g @openai/codex # 在 WSL2 中运行 Codex(端口不会被 Windows 保留策略影响) codexWSL2 有自己的网络栈,1455 端口不会受 Windows 端口排除策略的限制。
总结
os error 10013的本质是Windows 系统端口保留策略而非代码 bug。推荐使用方案一(调整动态端口范围),一劳永逸解决。如果你安装了 Docker Desktop 或启用了 WSL2,调整端口范围后记得检查相关服务是否正常运行。
