“connection refused”表明目标主机未在指定端口监听,需依次检查openclaw是否运行、是否绑定0.0.0.0(而非仅127.0.0.1)、端口是否被sshd等进程占用,再修改配置中listen地址与端口并重启服务。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

OpenClaw连接时提示“Connection refused”,说明客户端已发出TCP连接请求,但目标主机在22端口(或你指定的端口)上没有进程响应——不是密码错、不是密钥拒,而是压根没人监听这个门。
确认OpenClaw是否真在监听端口
先别急着改配置,直接查它到底有没有把门打开。打开终端,执行:
sudo ss -tlnp | grep ':22'
如果返回空,说明OpenClaw根本没成功绑定到22端口;如果看到类似 LISTEN 0 128 *:22 *:* users:(("openclawd",pid=1234,fd=5)) 这样的行,说明它在监听,但可能绑定了特定IP(比如只监听127.0.0.1),这时你需要继续看下一步。
若输出中显示的是 127.0.0.1:22 而非 *:22 或 0.0.0.0:22,则OpenClaw仅接受本机连接,远程SSH必然被拒。
检查OpenClaw服务状态与启动日志
执行:
systemctl status openclawd
观察状态是否为 【active (running)】。若显示 inactive (dead) 或 failed,说明服务根本没起来。
此时不要直接 systemctl start openclawd,先看失败原因:
journalctl -u openclawd --since "30 minutes ago" -n 50 -e
重点关注含 bind、Address already in use、Permission denied、Could not load host key 的行——这些才是真实拦路虎。比如出现 Address already in use,说明22端口正被sshd、docker或其他进程占着。
排查端口占用与冲突源
方法一:暴力扫端口
sudo lsof -i :22
或
sudo netstat -tulnp | grep ':22'
看PID对应哪个进程。常见冲突源有:sshd(系统自带SSH)、dropbear(嵌入式常用)、docker-proxy(Docker映射了22端口)、甚至某个残留的Python简易SSH服务器。
方法二:针对性检查OpenClaw配置
打开其配置文件(通常为 /etc/openclaw/config.yaml 或 /usr/local/etc/openclaw.conf),查找 port: 或 listen: 字段。若设为 port: 22 且系统已有sshd运行,就必须改端口或停掉sshd。
【切勿强行 kill -9 占用22的进程后再启OpenClaw——若该进程是系统关键SSH服务,会导致你彻底失联】
修改OpenClaw监听地址与端口
第一步:编辑OpenClaw主配置文件
sudo nano /etc/openclaw/config.yaml
第二步:定位监听配置项,将
listen: "127.0.0.1:22"
改为
listen: "0.0.0.0:2222"
或更安全的
listen: "[::]:2222"
第三步:保存退出,重启服务
sudo systemctl restart openclawd
第四步:验证新端口是否生效
sudo ss -tlnp | grep ':2222'
第五步:客户端连接时显式指定端口
ssh -p 2222 user@your-server-ip










