Kali 里 OpenClaw 调不动 nmap?TaoToken 这样改 openclaw.json 的模型 provider

Kali 里 OpenClaw 调不动 nmap?TaoToken 这样改 openclaw.json 的模型 provider Kali 上 curl 装完 OpenClaw本机 Ollama 挂着 qwen3.5:35b 当 agent 模型会话里打一句「用 nmap 扫一下这段网段」界面转两圈回你一段看着挺像回事的扫描计划终端里 nmap 根本没起来。这种「技能装了、exec 也放开了、Agent 就是驱不动终端」的卡点很多时候不在 clawhub而在后面那条模型通道——TaoToken 能换掉的就是这一段先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册并创建一把 API Key 放着等下改 openclaw.json 要用。排障这件事最怕乱翻。有人一上来就重装 OpenClaw有人去改 nmap 的权限还有人把 wizard 从头跑一遍最后发现问题只是配置里models.providers那一小段还指着http://你的IP:11434。下面按层次来先确认技能真的落在磁盘上再确认tools.exec的放行有没有生效最后才动模型 provider。顺序反了你会一直在错误的层里打转。1. Kali 上 curl 装完 OpenClaw让 nmap 扫网段为什么没反应1.1 先把现场还原清楚wizard 里跳过的那几项Kali 上装 OpenClaw 的流程本身没门槛curl 一行脚本拉下来跑起来就是 wizard。问题出在 wizard 里那几屏选项——很多人包括原始那篇的作者为了快点看到界面除了模型相关的几项其余能跳的全跳了。跳过的东西当时看不出代价等到你要它调外部命令的时候才浮出来。具体跳过的影响大致是三类一类是执行相关的默认策略没配比如命令执行的审批模式一类是工具白名单没配agent 知道自己有terminal-executor这个技能但真正要落成一条 shell 命令时被拦还有一类最关键——模型这一项你选了本机 Ollamaagent 的「大脑」就固定成了qwen3.5:35b这类本地跑的小模型。本地模型不是不能用问题在于它要驱动的是「多轮工具调用」这种活儿先读懂你的意图再决定调哪个工具再按工具要求的格式吐出参数拿到结果后再判断要不要继续调。这条链每一环都对格式和上下文长度有要求本地 30B 级别的模型在中文意图 英文参数混着来的时候经常在第二环就散了——它会给你一段自然语言描述的「计划」而不是一个真正的 tool call。这就是你看到「说了但没做」的根源。1.2 「调不动」的四种表现决定你该翻哪一层「nmap 调不动」其实是四种不同的故障翻错层就是白折腾。对照一下你遇到的是哪种现象大概率卡在哪一层agent 只回文字计划从不出现工具调用models.providers 这一层模型工具调用能力不足日志里有 tool call但命令没执行tools.exec / tools.allow 这一层放行没生效命令执行了报command not found: nmapclawhub 技能层或 PATHnmap 没进执行环境命令执行了nmap 自己报权限/参数错这已经是 nmap 本身的事不是 OpenClaw 的问题第四种反而是好消息说明链路通了只是参数要调。真正让人抓狂的是前两种尤其第二种——你明明把security设成full、ask设成off它就是不动。这时候别急着怀疑 OpenClaw 有 bug先把同样的配置换一条模型通道试一次。提示扫描只对你自己有授权的网段做。Kali 里跑 nmap 顺手扫到别人的资产性质就变了这条线自己守住。2. 第一层排查clawhub 里的 nmap、terminal-executor 是真装上了吗2.1 clawhub list 与磁盘路径核对原始流程里是先补 PATH再npm i -g clawhub然后clawhub install nmap、clawhub install safe-exec、clawhub install terminal-executor三个技能。三条 install 命令敲完不等于三个技能可用得回头看落点。在 Kali 的终端里先列一遍clawhub list正常应该能看到nmap、safe-exec、terminal-executor三个都带版本号。如果某个是not installedclawhub install那条命令八成是静默失败了——很常见的原因是 npm 全局目录权限不够安装过程写了半截。再直接去磁盘上确认技能目录确实有文件而不是只有一个空壳目录ls -al ~/.openclaw/skills/ ls -al ~/.openclaw/skills/nmap/ ls -al ~/.openclaw/skills/terminal-executor/如果目录存在但里面只有一个manifest.json之类的元数据文件、没有实际脚本那这个技能是「注册上了但没落地」。删掉重装比死磕快clawhub remove nmap之后再clawhub install nmap。2.2 Kali 上 PATH 与 npm 全局目录的坑Kali 默认用 zsh而 curl 安装脚本里写的路径可能按 bash 的 rc 文件来。结果就是你在当前 shell 里clawhub能用OpenClaw 的 gateway 作为后台进程起来的时候PATH里没有 npm 全局 bin 目录。先看 npm 全局 bin 在哪npm config get prefix假设输出是/usr/local那 bin 目录就是/usr/local/bin。然后确认 gateway 拿到的环境里有没有它。最稳的做法不是改 rc而是在~/.openclaw/openclaw.json里给执行环境显式声明后面第 3 节会一并写进去。还有一个容易被忽略的点nmap本身。Kali 一般自带但如果你用的是最小化安装的镜像which nmap可能是空的。这种情况下 agent 再聪明也调不出来先sudo apt install nmap补上。这一步和 OpenClaw 无关但排障时要在清单上。3. 第二层排查openclaw.json 里 tools.exec 与 tools.allow 放行到位没有3.1 tools.exec 三个字段host、security、ask配置文件的路径是~/.openclaw/openclaw.json。原始流程里改的是tools.exec这一段三个字段的作用分别是host命令在哪个进程里执行。写成gateway表示交给 gateway 进程去跑这样 WEB UI 和 gateway 会话共享同一个执行环境日志也能在 gateway 那边统一看到。写成别的值比如让每个会话自己 fork时你在 UI 里看到的行为会和日志对不上。security安全等级。full表示不做额外的沙箱裁剪命令按当前用户身份执行。ask是否每次都弹确认。off表示不弹agent 决定调用就直接执行。这三个字段的语义要理解对它们管的是「允许不允许执行」不管「模型愿不愿意发起执行」。很多人在这里反复改其实模型压根没吐出 tool call改多少次都没用。3.2 tools.allow 白名单与 gateway 重启顺序tools.allow是一个白名单数组只有列在里面的工具才会暴露给模型。原始配置里需要把terminal-executor、nmap、safe-exec这几项列进去。可以把两段合起来看形如下面这样字段值按你实际安装的技能名来{ tools: { exec: { host: gateway, security: full, ask: off, env: { PATH: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin } }, allow: [ terminal-executor, nmap, safe-exec ] } }改完千万别只重启 WEB UI。OpenClaw 的 gateway 是独立进程配置是在它启动时读的。正确的顺序是# 先停掉 gateway pkill -f openclaw-gateway # 确认端口已经释放 ss -ltnp | grep -i openclaw # 再重新拉起来 openclaw gateway start如果ss还能看到那个端口在监听说明旧进程没退干净直接启动新进程会静默失败或者读到旧配置。这一步的顺序错你会误以为「改了没用」。4. 第三层排查models.providers 还指着本机 Ollama换成 TaoToken 的 Base URL4.1 原来那段 ollama provider 长什么样前两层都确认过、日志里依然看不到 tool call就该动模型通道了。打开~/.openclaw/openclaw.json找models这一段原始写法大致是这样{ models: { providers: { local-ollama: { baseUrl: http://192.168.1.50:11434, api: ollama, apiKey: , models: [qwen3.5:35b] } }, default: qwen3.5:35b } }注意baseUrl是http://内网IP:11434api是ollamaapiKey是空的——Ollama 本地服务不需要 Key。这一段就是「Agent 的大脑」的接线口。它指向哪模型请求就发到哪。4.2 改写后的 models.providers 配置可复制把上面那段整体替换成走 TaoToken 的写法。要点只有三个baseUrl填https://taotoken.net/api末尾不要加/v1apiKey填你自己的 Keyapi这一项按你 OpenClaw 版本支持的枚举写OpenAI 兼容协议通常写openai部分版本会写成openai-chat以你本地 gateway 启动日志里的报错提示为准。{ models: { providers: { taotoken: { baseUrl: https://taotoken.net/api, api: openai, apiKey: YOUR_API_KEY, models: [YOUR_MODEL_ID] } }, default: YOUR_MODEL_ID } }三个容易填错的地方逐个说一下第一baseUrl只到https://taotoken.net/api。不要写成https://taotoken.net/api/v1也不要带任何查询参数。OpenClaw 内部会自己拼/chat/completions这类路径你多写一层/v1最终请求路径就重复了表现是 404。第二官网落地页的地址和填进配置的地址是两码事。注册、创建 Key、看模型广场、查用量走的是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 填进baseUrl的只能是https://taotoken.net/api。把带 UTM 的完整链接粘进配置文件请求会被当成非法路径。第三apiKey是字符串前后不要留空格也不要带引号里的换行。复制粘贴时最容易多带一个空格报错信息通常长得像「invalid api key」看起来像 Key 错了其实只是多了个空格。4.3 apiKey 从哪来、模型 ID 怎么取Key 的创建入口只有一个打开 TaoToken 控制台注册登录后在 API Keys 页面新建一把复制出来填到apiKey字段。建议给 Kali 这台机器单独建一把 Key以后要换机器或者要吊销互不影响。YOUR_MODEL_ID不要凭记忆写。模型广场里列出的是什么 ID就填什么 ID模型上下架和命名会变写死在文章里的 ID 过两周可能就不认了。所以自己打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的模型广场挑一个标注了工具调用能力的模型把 ID 原样复制过去models数组和default两处都改。换模型这件事在这条链路里权重很高。本机qwen3.5:35b在单轮问答上够用但要稳定地把「扫这段网段」翻译成nmap -sV 192.168.1.0/24这种结构化调用对模型的要求是另一个量级。通道换成 TaoToken 之后你在同一份配置里换一行模型 ID 就能换脑子不用再折腾本地显存和量化。5. 验证回到 OpenClaw WEB UI 再发一次「用 nmap 扫这段网段」5.1 gateway 日志里怎么确认请求落到了 TaoToken 通道配置文件保存、gateway 重启完成之后验证不要看截图看日志。开一个终端窗口盯住 gateway 输出openclaw gateway logs -f然后回到 WEB UI 的会话里重新发一遍那句话——把网段写具体比如「用 nmap 对 192.168.1.0/24 做一次服务版本探测」。看日志里模型请求那几行关键信息是请求的目标地址如果打印的是https://taotoken.net/api开头的 URL说明 provider 切换生效了请求走的是新通道。如果还是192.168.1.50:11434或者localhost:11434说明 JSON 里旧的 provider 段没删干净或者default还指着老模型名。如果打印的是https://taotoken.net/api/v1/chat/completions这种带双层路径的回去看 4.2 的第一条baseUrl多写了。5.2 exec 被真正触发的三个信号请求落到正确通道之后紧接着看有没有「执行」这一层。真正的工具调用被触发时日志里通常能连着看到三段一段是模型返回的 tool call里面带工具名和参数一段是 gateway 把命令交给执行环境的记录一段是命令的退出码和输出。这三段缺任何一段都说明还没通。只有第一段没有第二段问题回到第 3 节的tools.exec和tools.allow三段都有但输出是command not found问题回到第 2 节的 PATH。这也是为什么排障要分层——日志会明确告诉你现在卡在哪一层不用猜。有一点要写清楚OpenClaw 在这里做的是「把你的意图翻译成命令并交给本机终端」命令实际是在你这台 Kali 上、以你的用户身份跑起来的。AI 工具本身不会绕过你机器的权限去执行任何东西它是通过 gateway 这个本地进程落地的。所以 sudo 相关的操作、需要 root 权限的扫描选项仍然要你自己决定要不要给、怎么给。5.3 跑通后再补 nmap 参数链路一通nmap 会开始按 agent 给的参数跑。这时候别急着让它扫大网段先用一个最保守的参数验证行为是否符合预期# 你先自己在 Kali 终端跑一遍确认目标可达、权限够用 nmap -sV -T4 192.168.1.10自己跑通了再回到会话里让 agent 对同一个 IP 下指令对比两边输出是否一致。一致说明参数翻译这一环也稳了接下来才考虑扩到192.168.1.0/24这种网段级扫描。-sV这类需要更长时间的选项、-O这类需要更高权限的选项逐个加、逐个验。一次性把一堆激进参数丢给 agent出问题时你分不清是模型翻译错了还是 nmap 本身被挡了。Kali 里 nmap 的原始套接字权限问题也在这时候暴露如果日志里出现权限相关的报错那是本机配置的事跟模型通道没关系。6. 换通道之后还会遇到的几个报错6.1 Key 无效、Key 带空格、Key 用错环境401或invalid api key是最常见的一类。三种原因按概率排Key 前后多带了空格或换行Key 是别的平台的、粘串了Key 已经被吊销或者额度用尽。前两种自己肉眼核对一遍openclaw.json里那一行字符串就行第三种需要去控制台看状态——还是从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 进在 API Keys 页面能看到每把 Key 的状态该重建就重建一把把新 Key 覆盖回配置文件重启 gateway。6.2 模型 ID 不被识别、工具调用退化成纯文本model not found这一类九成是 ID 抄错或者模型已经下架。回模型广场复制一次别用历史记录里的旧 ID。还有一种更隐蔽的情况请求 200 成功但 agent 又开始只回文字计划、不调工具了。这说明通道通了但当前选的模型在工具调用上不够稳。这时候不是配置问题换一个模型 ID 再试default和models数组同时改。这也是为什么建议在模型广场挑的时候就优先看有工具调用标注的模型。6.3 OpenClaw 重启后配置被覆盖少数情况下重新跑 wizard 或者某些版本的自动更新会把openclaw.json里手改的部分盖掉表现为「昨天还好好的今天又不动了」。养成习惯改完配置先备份一份cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak出问题先 diff 一下比重新排一遍快得多。7. 这次调用到底记没记账回控制台看一眼链路跑通、nmap 正常扫完一轮之后建议回控制台对一下账。这一步不费事但能帮你确认两件事一是这把 Key 的请求确实被计上了说明通道稳定二是能看清这次扫描的对话消耗了多少方便判断后面要不要给 Kali 这台机器换一把独立 Key或者调整默认模型。具体路径是先在 TaoToken 模型对话 里用同一把 Key 手动发一条消息验证 Key 和模型 ID 都对长期在 Kali 上让 OpenClaw 跑批量任务的话可以看一眼 Coding Plan 的套餐够不够Key 的增删和轮换在 控制台 API Keys 里做。最后提醒一句排障顺序别倒过来用clawhub list确认技能在盘上、openclaw.json的tools.exec和tools.allow确认放行到位、models.providers确认baseUrl是https://taotoken.net/api且apiKey是YOUR_API_KEY那把真 Key三层依次过一遍再去看 gateway 日志。绝大多数「OpenClaw 调不动 nmap」都停在这三层里的某一层而不是什么玄学问题。