< >
Home » OpenClaw-AI助手入门教程 » OpenClaw AI助手入门教程-云端openclaw控制本地电脑(安全反向隧道方式)

OpenClaw AI助手入门教程-云端openclaw控制本地电脑(安全反向隧道方式)

说明

  • 本教程将引导你使用 SSH 反向隧道,将内网中的本地电脑安全地连接到云端 OpenClaw Gateway,并通过 WebChat 等聊天界面发送自然语言指令,远程控制本地浏览器打开指定网页。这是 OpenClaw 节点功能的典型应用场景,适用于本地无公网 IP 但需要被云端管控的环境。

适用场景

  • 本地电脑位于 NAT 或防火墙后,无法直接被公网访问。
  • 你有一台具有公网 IP 的云服务器,用于运行 OpenClaw Gateway。
  • 希望通过云端 AI 助手(集成到 WebChat、飞书、Telegram 等)向本地电脑下发命令,例如打开浏览器、执行脚本等。
  • 需要安全的加密通道,并希望保留命令执行的审批机制。

前提条件

  1. 云服务器(公网 IP):

    • 已安装 Docker 和 Docker Compose。
    • 已部署 OpenClaw Gateway 服务,并确保其监听端口(默认为 18789)可被本地访问(建议监听 127.0.0.10.0.0.0,但通过隧道连接时只需 localhost 即可)。
    • 已获取 Gateway 的访问令牌(gateway.auth.token)。
    • 可选:已配置 WebChat 或其他聊天机器人集成,以便发送自然语言指令。
  2. 本地电脑(Mac / Linux / Windows):

    • 已安装 Node.js 和 npm。
    • 已全局安装 OpenClaw CLI:npm install -g openclaw@latest
    • 已安装浏览器(Chrome 或 Chromium)及 OpenClaw 浏览器扩展(用于接收打开网页的命令)。
    • 能够通过 SSH 登录云服务器(建议配置 SSH 密钥免密登录)。
  3. 网络

    • 本地电脑可以访问互联网,并能建立 SSH 连接到云服务器。

整体步骤概览

  1. 定义环境变量(本地电脑和云端需保持一致的关键信息)。
  2. 在本地建立 SSH 反向隧道,将本地端口映射到云服务器的 Gateway 端口。
  3. 在本地启动 OpenClaw 节点,通过隧道连接云端 Gateway。
  4. 在云端批准该节点。
  5. 测试节点命令执行,体验审批流程。
  6. 通过 WebChat 发送自然语言指令,控制本地浏览器打开网页。## 整体步骤概览

具体实施

  1. 设置环境变量

为了后续命令简洁且不易出错,先在本地电脑的终端中定义以下变量(根据实际情况替换值):

# SSH 登录云服务器的地址,格式 user@host
export CLOUD_SERVER="root@your-server-ip"

# 本地监听端口(用于节点连接,可自定义,如 18888)
export LOCAL_PORT=18888

# 云端 Gateway 监听端口(默认为 18789)
export REMOTE_PORT=18789

# 从云端获取的 Gateway 访问令牌
export TOKEN="your-gateway-token-here"

# 给本地节点起一个易识别的名称(将显示在云端节点列表中)
export NODE_NAME="My-Local-PC-Via-Tunnel"
  • 提示:令牌可以从云服务器上通过 docker compose exec openclaw-gateway openclaw config get gateway.auth.token 获取。
  1. 建立 SSH 反向隧道

在本地电脑执行以下命令,该命令会在后台建立一条持久化的 SSH 隧道,将本地的 $LOCAL_PORT 转发到云服务器的 127.0.0.1:$REMOTE_PORT,即 Gateway 服务所在的地址。

ssh -f -N -T \
  -o ServerAliveInterval=60 \
  -o ServerAliveCountMax=3 \
  -o ExitOnForwardFailure=yes \
  -L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT \
  $CLOUD_SERVER


#参数解释:

-f:认证后转入后台运行。

-N:不执行远程命令,仅用于端口转发。

-T:禁用伪终端分配。

-L:本地端口转发,格式 本地端口:目标主机:目标端口。此处将本地 $LOCAL_PORT 收到的流量转发到云服务器的 127.0.0.1:$REMOTE_PORT。

ServerAliveInterval/CountMax:保持隧道活跃,防止因超时被断开。

ExitOnForwardFailure:如果端口转发失败(如端口被占用),则立即退出。
  • 隧道建立后,你可以通过 ps aux | grep ssh 查看进程。为了确保隧道长期稳定,建议使用 autossh 替代原生命令
  1. 在本地启动 OpenClaw 节点连接隧道

隧道生效后,本地节点就可以通过 127.0.0.1:$LOCAL_PORT 连接到云端的 Gateway。执行:

export OPENCLAW_GATEWAY_TOKEN="$TOKEN"
openclaw node run \
    --host 127.0.0.1 \
    --port $LOCAL_PORT \
    --display-name "$NODE_NAME" \
    --node-id "node-$(date +%s)"   # 可选,生成唯一 ID,便于管理

#说明:

--host 和 --port 指向本地的隧道入口。

--display-name 将在云端节点列表中显示为友好的名称。

--node-id 可以自定义,如果不指定,系统会自动生成一个唯一 ID。

执行后,节点会尝试连接 Gateway 并进入等待批准状态。终端会输出类似“paring required”的信息。
  • 这里不少教程有差异的地方。很多描述这里会出现终端会输出类似“Waiting for approval...”,然后云端再批准。但是我这里就是提示要配对。实际是放在devices里面,角色标为node
  1. 在云端批准该节点

登录云服务器,在云端执行以下命令查看待批准的节点列表:

docker compose exec openclaw-gateway node dist/index.js devices list

你会看到类似输出:

Pending (1)
┌──────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────┬────────────┬────────┬────────┐
│ Request                              │ Device                                                                                                             │ Role   │ IP         │ Age    │ Flags  │
├──────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────┼────────────┼────────┼────────┤
│ 6f167694-8e7c-4ba4 │ Master-Mac-website                                                                                                 │ node   │            │ 1m ago │        │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────┴────────────┴────────┴────────┘

记下节点的 ID(例如 6f167694-8e7c-4ba4),然后批准它:

docker compose exec openclaw-gateway node dist/index.js devices approve 6f167694-8e7c-4ba4

现在节点状态应变为 Paired 列表里,表示已成功连接并可用:

docker compose exec openclaw-gateway node dist/index.js devices list
  1. 测试节点命令(体验审批流程)

为了验证节点是否正常工作,可以在云端执行一条简单命令,例如 echo 'hello',使用源码方式:

docker compose exec openclaw-gateway node dist/index.js nodes run \
    --node "$NODE_NAME" \
    --raw "echo 'hello'"
  • 由于默认安全级别可能为 full,此时命令不会立即执行,而是创建一个待审批请求。你会在集成的 WebChat(或其他审批界面)中看到一条待审批的通知,点击 “Allow once” 即可批准该次执行。批准后,命令结果会返回,本地终端的输出会显示在云端执行命令的界面上。

提示:如果你希望取消每次手动审批,可以修改默认安全级别为 none(风险较高)或 restricted,但请确保在可信环境中操作。

  1. 通过 WebChat 发送自然语言指令打开本地浏览器

如果云端 Gateway 已经与 WebChat(或其他聊天机器人)集成,你可以直接在聊天窗口输入自然语言指令来控制本地节点。

在 WebChat 中发送类似以下消息:

打开节点 My-Local-PC-Via-Tunnel 的浏览器,访问 www.ncnynl.com

Gateway 会解析指令,并将其转换为节点命令:openclaw browser open。同样,如果安全级别为 full,你需要先在 WebChat 中点击 “Allow once” 批准该次执行。批准后,本地电脑的默认浏览器(需已安装扩展并处于启用状态)将自动打开并跳转到 www.ncnynl.com

验证与排错

  • 检查隧道是否正常工作

在本地执行:

curl http://127.0.0.1:$LOCAL_PORT/api/v1/health

如果返回 {"status":"ok"} 或类似信息,说明隧道已连通 Gateway

  • 隧道自动重连

原生的 SSH -f 后台进程在网络断开后不会自动重连。建议使用 autossh 实现自动重连:

autossh -M 0 -f -N -T \
  -o ServerAliveInterval=60 \
  -o ExitOnForwardFailure=yes \
  -L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT \
  $CLOUD_SERVER
  • 节点无法连接常见原因
令牌错误:重新获取令牌并检查环境变量。

隧道失效:确认 SSH 进程存活,或使用 autossh。

Gateway 未监听 localhost:在云端检查 netstat -tlnp | grep $REMOTE_PORT,确保监听地址包含 127.0.0.1。

安全注意事项

令牌保密:$TOKEN 是 Gateway 的访问凭证,切勿泄露。建议通过环境变量临时设置,不要写入脚本文件或共享。

SSH 密钥安全:建议为隧道单独创建 SSH 密钥,并限制其用途(如 command="echo 'port forwarding only'"),降低风险。

防火墙策略:云服务器安全组仅需开放 SSH 端口(22)给本地 IP,Gateway 端口 18789 无需对外暴露,只监听 localhost 即可。

审批机制:即使建立了隧道,命令执行仍需手动批准,这是防止未授权操作的重要防线。可根据实际需求调整安全级别,但请谨慎。

总结

  • 通过 SSH 反向隧道,你可以轻松将内网中的本地电脑接入云端的 OpenClaw Gateway,实现安全的远程控制。结合 WebChat 等自然语言界面,你只需发送一句话,就能让远方的电脑自动打开浏览器、执行脚本,甚至操作文件。这种模式既利用了云端的计算和 AI 能力,又保留了本地设备的物理交互能力,是 OpenClaw 节点功能的高级应用。

  • 现在,尝试让你的云端 AI 助手帮你远程打开本地浏览器,访问你喜欢的网站吧!如果在实践中遇到任何问题,欢迎查阅 OpenClaw 官方文档或社区讨论。

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: openclaw ai助手入门教程