端口被占用是openclaw部署失败的主因,需先用netstat查pid及进程,再针对性终止(如停用sshd.socket而非杀svchost),或修改config.yaml中ssh_port为未占端口(如2222)并配置防火墙放行。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw部署时提示端口被占用,说明目标端口(默认通常是22或自定义SSH端口)已被系统其他进程、残留服务或冲突的SSH监听机制独占,必须释放该端口才能完成部署。
确认被占用端口及对应进程
先查清具体哪个端口被占、谁在用它。Windows下以管理员身份打开PowerShell:
执行:netstat -ano | findstr :22(若部署指定的是其他端口,如2222,则把22换成对应数字)
输出中最后一列是PID。记下这个数字,再运行:tasklist | findstr "PID号"(例如tasklist | findstr "1234"),就能看到占用端口的程序名。常见结果有:svchost.exe(可能托管sshd.socket)、conhost.exe(旧SSH会话未退出)、dockerd.exe、甚至VSCode Remote-SSH本地代理。
终止占用进程(谨慎操作)
方法一:直接结束进程(适用于非系统关键进程)
执行:taskkill /f /pid PID号(如taskkill /f /pid 1234)
方法二:若PID对应svchost.exe,大概率是sshd.socket在抢端口——这是OpenSSH for Windows升级后常见问题,【不能直接杀svchost,必须停用socket服务】
执行:Stop-Service sshd.socket → Set-Service sshd.socket -StartupType Disabled
然后启动主服务:Start-Service sshd
修改OpenClaw配置端口(推荐长期方案)
第一步:打开OpenClaw部署目录下的配置文件,路径通常为config.yaml或settings.json,查找port、ssh_port或listen_port字段
第二步:将值改为一个未被占用的端口,如2222、5678或60022(避开1024以下特权端口,避免权限问题)
第三步:保存文件,重新运行部署命令
注意:改端口后,所有连接方(如客户端、跳板机、自动化脚本)都必须同步更新端口号,否则连不上。
检查Windows防火墙放行新端口
如果改了端口但外部仍连不上,大概率是防火墙拦截。管理员权限运行PowerShell:
执行:New-NetFirewallRule -Name "OpenClaw-Port-2222" -DisplayName "OpenClaw SSH Port 2222" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222
若原端口是22,且你选择保留22,则确认已有规则存在:Get-NetFirewallRule -DisplayName "OpenSSH Server (sshd)";若不存在,需手动创建同名规则并指定端口22。









