1. 从一次内网扫描说起OpenClaw 暴露面到底长什么样OpenClaw社区里常叫“小龙虾”是一个开源的本地 AI Agent 框架它能用自然语言直接操作宿主机读写文件、跑 Shell、访问网页都不在话下。也正因为权限高、能自主执行一旦部署时把监听地址从127.0.0.1改成0.0.0.0又没加任何认证它就从“效率工具”变成了内网里一个带系统级控制权的开放接口。适合谁看这篇负责内网安全排查的运维、做 AI Agent 落地的研发以及想把 OpenClaw 接进统一模型网关的开发者。我这次排查的目标很明确先确认内网里有没有 OpenClaw 实例把端口暴露出来再把它的模型调用收敛到 TaoToken 统一 Key 上避免每个 Agent 各自散落一堆 API Key。整条链路分两段——暴露面排查和接入加固下面按可复制的步骤走一遍。需要先说明的是端口扫描只对你自己有授权的资产做别拿去扫别人的网段。这一点在脚本注释里也会反复强调。2. TaoToken 前置准备为什么要把 Key 收口OpenClaw 这类 Agent 默认会读取本地配置文件里的模型凭证如果每个实例、每个 Skills 都塞一份 Key一旦某台机器被翻泄露面就是整片。TaoToken 在这里的角色是统一模型接入层你只维护一份 KeyOpenClaw 通过兼容接口去调用换模型、加额度、查用量都在一个控制台里完成。动手前先做三件事。第一注册并登录官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 拿到账号。第二进控制台创建 API Key地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 建议按环境建不同 Key比如openclaw-dev、openclaw-prod方便出问题时单独吊销。第三把接口基址记牢https://taotoken.net/api这个地址在配置里会反复出现注意它不带任何查询参数。如果你后面要跑长期编码任务或 Agent 常驻进程可以顺带看下 Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 按用量选套餐比按次调用更划算。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 配置字段对不上时以文档为准。3. 可复制配置config.toml 与 settings.json 骨架OpenClaw 的配置通常落在~/.openclaw/openclaw.json或~/.config/openclaw/下不同版本字段名略有差异。下面给一份能直接改的骨架核心是把监听地址锁回本地回环并把模型请求指向 TaoToken。先看config.toml适合用 TOML 管理网关参数的部署方式# ~/.openclaw/config.toml [gateway] # 关键只监听本地不要写 0.0.0.0 host 127.0.0.1 port 18789 # 开启本地鉴权避免同机其他用户直接调用 auth_token change-me-local-token [control] host 127.0.0.1 port 8000 [model] # TaoToken 统一接入基址注意不带 UTM 参数 base_url https://taotoken.net/api api_key sk-your-taotoken-key # 按需选择模型具体可用模型以控制台为准 default_model claude-sonnet [security] # 禁止 Agent 默认以高权限账户运行 allow_shell true sandbox true再看settings.json如果你的 OpenClaw 版本走 JSON 配置字段对应关系如下{ gateway: { host: 127.0.0.1, port: 18789, authToken: change-me-local-token }, controlUI: { allowedOrigins: [ http://localhost:18789, http://127.0.0.1:18789 ] }, model: { baseUrl: https://taotoken.net/api, apiKey: sk-your-taotoken-key, defaultModel: claude-sonnet }, security: { sandbox: true, allowShell: true } }两个文件里最容易被忽略的是allowedOrigins。很多人为了图方便写成[*]等于把跨域限制也拆了配合0.0.0.0监听就是双重暴露。改完配置后重启 OpenClaw 服务让新参数生效。注意api_key不要提交到 Git也不要用明文写在共享目录里。生产环境建议用环境变量注入配置文件里只留占位符。4. 验证请求端口连通性与模型调用测试配置改完不能只看文件得实际验证两件事端口是不是真的只绑在本地以及模型请求能不能通到 TaoToken。先验证监听状态。Linux 下用ssWindows 下用netstat# Linux / macOS确认 18789 只监听 127.0.0.1 ss -tlnp | grep 18789 # 期望输出类似 # LISTEN 0 128 127.0.0.1:18789 0.0.0.0:* users:((node,pid1234,fd20))# Windows确认绑定地址 netstat -ano | findstr 18789如果输出里出现0.0.0.0:18789或[::]:18789说明还在对外监听回去改配置。接着做一次本地连通性测试curl -s http://127.0.0.1:18789/health # 正常返回包含 status 字段例如 {status:ok}然后验证模型链路。用 TaoToken 的接口直接发一条最小请求确认 Key 和基址都对curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-your-taotoken-key \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [{role: user, content: ping}] }返回里带choices字段就说明接入通了。最后回到 OpenClaw 里触发一次 Agent 任务比如让它读一个本地文件并总结观察日志里模型请求是否走了taotoken.net/api。想单独验证模型对话效果可以直接用模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 发几条消息对比。5. 本篇常见错排查扫描漏报与接入报错排查过程中踩过的坑基本集中在两类扫描扫不到和接入报 401。扫描漏报最常见的原因是实例只绑了127.0.0.1网络侧完全探测不到但进程还在高权限跑着。这种情况只能靠终端侧核查检查~/.openclaw/openclaw.json是否存在、有没有openclaw、clawdbot相关的 node 进程。另一个漏报源是改了默认端口只扫 18789 就会漏建议把 8000、9090 一起纳入探测范围。接入报错方面401 Unauthorized多半是 Key 写错或带了多余空格重新从控制台复制一次。404通常是base_url写成了带路径的形式正确写法就是https://taotoken.net/api不要自己拼/v1之外的段。如果 OpenClaw 日志里报连接超时先确认这台机器能不能正常访问外网接口再检查有没有本地防火墙拦了出站。还有一种情况是配置改了但没重启OpenClaw 仍用旧参数跑表现就是“明明改了还是暴露”。养成改完systemctl restart openclaw或重启进程的习惯。现象可能原因处理动作扫描无结果但进程存在仅监听 127.0.0.1终端侧核查配置文件与进程扫描无结果改了默认端口扩大端口探测范围模型请求 401Key 错误或含空格重新复制 Key模型请求 404base_url 拼错固定为 https://taotoken.net/api改配置不生效未重启服务重启 OpenClaw 进程6. 收口之后把统一 Key 变成默认动作暴露面排查做完只是第一步真正省事的是把 TaoToken 统一 Key 写进标准部署模板新机器一上来就是本地监听加统一接入不用每次手动改。长期跑 Agent 的话去 Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 看下套餐比零散调用更好控成本。Key 管理统一在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 做接入细节对不上就翻 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。把这两步固化成部署清单下次应急就不用从头扫一遍了。
