1. Kali 上跑 OpenClaw Dashboard,为什么还要折腾远程访问
OpenClaw Dashboard 是一个把 OpenClaw 运行数据可视化的 Web 面板,适合已经在用 OpenClaw 做自动化任务、又想有个界面看会话、模型调用和刷新状态的人。它本身是个 Go 写的轻量服务,默认只监听127.0.0.1:8080,也就是说你在 Kali 本机浏览器能打开,但同一局域网里的 Windows、Mac 或者手机是打不开的。
我这次的环境是 Kali Linux 装在虚拟机里,日常主力机是 Windows 10,所以需求很明确:Dashboard 跑在 Kali 上,Windows 通过 SSH 隧道访问,同时把 AI 工具调用的 Key 统一走 TaoToken 的 API 通道,避免每个工具各配一份 Key、各记一个地址。整套流程拆开看是四件事:装 Go 环境、部署 Dashboard、配 TaoToken 统一 Key、用 SSH 隧道加 Systemd 把远程访问做稳。
这篇笔记交付的是可直接复制的config.toml骨架、SSH 隧道命令、Systemd 服务单元,以及一套连通性验证动作。如果你只是想把面板跑起来看一眼,前三节就够了;如果你要长期挂着用,第四节和第五节的排障部分建议一起看完。
2. 前置准备:Go 环境与 TaoToken 统一 Key
2.1 Kali 安装 Go 并确认版本
OpenClaw Dashboard 的安装脚本会先尝试下载预编译二进制,失败后回退到源码编译,所以 Go 环境是硬性依赖。Kali 自带的 apt 源里就有 golang:
sudo apt update sudo apt install golang -y go versiongo version输出类似go version go1.21.x linux/amd64就说明装好了。如果版本低于 1.20,建议去 Go 官网下最新 tar 包手动解压到/usr/local/go,再把/usr/local/go/bin加进PATH,否则编译阶段可能报语法不兼容。
2.2 为什么用 TaoToken 统一 Key
OpenClaw 这类工具会调用多个模型,如果每个模型、每个工具都单独配 Key,配置文件会散得到处都是,换一次 Key 要改五六个地方。TaoToken 的做法是给你一个统一的 API 通道和一把 Key,所有 AI 工具都指向同一个地址,模型切换在服务端完成。
对 Dashboard 场景来说,好处是config.toml里只需要维护一个api_base和一个api_key,后面接 Claude Code、接对话工具、接自动化脚本都是同一套。你可以在控制台里创建和管理 Key:
控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
创建完 Key 之后,API 地址统一用https://taotoken.net/api,注意这个地址不带任何查询参数,直接填进配置即可。如果你后面要接 Claude Code 这类编码工具,可以看接入文档里的对应章节:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
2.3 目录规划
我习惯把配置和数据分开,Dashboard 的配置放在~/.openclaw/dashboard/,日志走 Systemd 的 journal,不额外落文件。先建目录:
mkdir -p ~/.openclaw/dashboard cd ~/.openclaw/dashboard3. 可复制配置:config.toml 骨架与 Systemd 单元
3.1 config.toml 骨架
Dashboard 支持config.json和config.toml两种格式,我选 TOML 是因为注释友好、层级清晰。下面这份骨架可以直接复制,把api_key换成你自己的:
# ~/.openclaw/dashboard/config.toml [server] # Dashboard 监听地址,保持 127.0.0.1 由 SSH 隧道转发 host = "127.0.0.1" port = 8080 # 刷新间隔,单位秒 refresh_interval = 30 [ai] # TaoToken 统一 API 通道 api_base = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" # 默认模型,按需替换 default_model = "claude-sonnet-4-20250514" timeout = 60 [openclaw] # OpenClaw 主程序数据目录 data_dir = "/home/kali/.openclaw" # 会话模型探测命令,报 killed 时可先注释掉 fetch_live_session_models = true [log] level = "info"几个参数说明:host千万别改成0.0.0.0,除非你明确知道自己在做什么,暴露到公网风险很高,用 SSH 隧道才是正路。refresh_interval设太小会频繁触发模型探测,内存吃紧的虚拟机上容易出问题,30 秒是个平衡点。fetch_live_session_models就是安装日志里signal: killed的常见来源,后面排障会细说。
3.2 安装 Dashboard
官方脚本会自动检测架构、下载或编译二进制、注册 Systemd 用户服务:
curl -fsSL https://raw.githubusercontent.com/mudrii/openclaw-dashboard/main/install.sh | bash安装日志里重点看三行:安装目录是不是~/.openclaw/dashboard;有没有出现Download failed, building from source...,出现说明走了源码编译,只要 Go 装好了就能过;最后有没有Created systemd user service。如果卡在下载阶段,多半是网络到 GitHub 不稳定,重跑一次脚本通常能过,因为第二次会直接走源码编译。
3.3 Systemd 用户服务单元
脚本会生成一个用户级服务,但默认单元文件往往比较简陋。我把它替换成下面这份,加了重启策略和环境变量:
# ~/.config/systemd/user/openclaw-dashboard.service [Unit] Description=OpenClaw Dashboard After=network-online.target Wants=network-online.target [Service] Type=simple WorkingDirectory=%h/.openclaw/dashboard ExecStart=%h/.openclaw/dashboard/openclaw-dashboard --config %h/.openclaw/dashboard/config.toml Restart=on-failure RestartSec=5 # 内存吃紧时限制一下,避免被 OOM 杀 MemoryMax=512M Environment=GOMEMLIMIT=384MiB [Install] WantedBy=default.target改完执行:
systemctl --user daemon-reload systemctl --user enable --now openclaw-dashboard systemctl --user status openclaw-dashboardstatus里看到active (running)就对了。用户级服务默认不会在未登录时启动,如果你希望开机就跑,需要开 lingering:
sudo loginctl enable-linger kali这一步很多人会漏,结果重启虚拟机后服务没起来,以为是配置坏了。
4. SSH 隧道与连通性验证
4.1 Windows 侧建立隧道
Dashboard 监听在 Kali 的127.0.0.1:8080,Windows 上直接用 SSH 本地端口转发把它映射过来。假设 Kali 的 IP 是172.16.2.131,用户名kali:
ssh -L 18080:127.0.0.1:8080 kali@172.16.2.131参数拆开看:18080是 Windows 本地端口,随便挑个没占用的;127.0.0.1:8080是 Kali 内部 Dashboard 的监听地址,注意这里的127.0.0.1是站在 Kali 视角看的;最后是登录信息。这条命令执行后保持终端不关,隧道就一直在。
想更省事可以加-N只转发不开 shell,再加-f丢到后台:
ssh -N -f -L 18080:127.0.0.1:8080 kali@172.16.2.1314.2 验证请求是否打通
先在 Kali 本机确认服务活着:
curl -s http://127.0.0.1:8080/api/refresh | head -c 200返回 JSON 就说明 Dashboard 本身没问题。然后在 Windows 浏览器打开http://127.0.0.1:18080,能看到面板就说明隧道通了。如果浏览器打不开但 Kali 本机 curl 正常,问题一定在隧道或 Windows 端口占用上。
再验证 TaoToken 通道是否可用,直接在 Kali 上打一次 API:
curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的TaoToken密钥" | head -c 300返回模型列表说明 Key 和地址都对。这一步很关键,因为 Dashboard 面板能打开不代表 AI 调用链路是通的,两者是独立的。
4.3 验证结果对照
| 检查项 | 命令/动作 | 预期结果 |
|---|---|---|
| 服务状态 | systemctl --user status openclaw-dashboard | active (running) |
| 本机接口 | curl 127.0.0.1:8080/api/refresh | 返回 JSON |
| 隧道连通 | Windows 浏览器开127.0.0.1:18080 | 面板正常渲染 |
| Key 通道 | curl taotoken.net/api/v1/models | 返回模型列表 |
| 开机自启 | 重启后systemctl --user status | 仍为 running |
5. 本篇常见错排查
5.1 fetchLiveSessionModelsCLI: signal: killed
这是安装日志里最常见的报错,原因是初始刷新时去探测 OpenClaw 主程序的实时会话模型,进程被系统 OOM killer 干掉了。处理顺序:先确认 OpenClaw 主程序本身在跑,ps aux | grep openclaw看一眼;然后在config.toml里把fetch_live_session_models改成false,重启服务;如果确实需要这个功能,给虚拟机加内存,或者把 Systemd 单元里的MemoryMax调大。
5.2 隧道通了但页面 502
多半是 Dashboard 服务挂了但 SSH 隧道还活着。SSH 转发只负责端口映射,不管后端死活。回到 Kali 执行systemctl --user restart openclaw-dashboard,再看journalctl --user -u openclaw-dashboard -n 50找崩溃原因。常见的是配置文件 TOML 语法写错,比如字符串没加引号,服务启动即退出。
5.3 Windows 本地 18080 被占用
ssh -L报bind: Address already in use,换个端口就行,比如-L 28080:127.0.0.1:8080。Windows 上用netstat -ano | findstr 18080能查到占用进程。别去杀系统进程,换端口最快。
5.4 重启后服务不自启
两个原因:一是没开 lingering,loginctl enable-linger kali补上;二是单元文件放在了~/.config/systemd/user/但没enable,执行systemctl --user enable openclaw-dashboard。注意用户级服务的enable和系统级不一样,不需要 sudo。
5.5 API 返回 401
Key 错了或者带了多余空格。TOML 里字符串是原样读取的,复制 Key 时容易带上换行。重新在控制台生成一把,粘贴后手动检查首尾。如果确认 Key 没问题,检查api_base是不是写成了带路径的形式,正确值就是https://taotoken.net/api,不要自己拼/v1。
6. 长期挂着用:把 Key 和隧道都收进配置
跑通之后,日常使用其实就两条命令:Kali 上服务由 Systemd 托管,Windows 上一条ssh -N -f -L建隧道。真正需要维护的只有config.toml里的 Key 和模型名。如果你后面要接编码类工具或者做 Agent 自动化,建议直接看 Coding Plan,它把额度、模型和调用方式都打包好了,比一个个工具单独配省事:
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
想先在网页里试一下模型对话效果,确认 Key 和模型名对得上,可以用模型对话页面:
模型对话:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
最后留一个我踩过的坑:config.toml改完一定要systemctl --user restart,Dashboard 不会热加载配置。有次我改完 Key 直接刷新页面,一直 401,排查了半小时才发现服务还在用旧配置。养成改完就重启、重启完看status的习惯,能省掉大部分莫名其妙的报错。