Komari 探针部署:装好先别急着关终端,管理员是"谁先打开谁建"
面板第一次启动,日志里有这么一行:
[INFO/SERVER] First-run installation guide is available on 127.0.0.1:25774
意思是安装向导已经开好了,等人来填。问题是,"人"是谁它不管。
Komari 是个轻量探针,一个面板收多台机器的 CPU、内存、流量。部署本身很简单,这篇主要写两处我觉得默认值偏松的地方。下面的过程先在一台 Debian 测试机上跑过,面板版本 1.6.1,Agent 1.5.11,都是直接下的 release 二进制。
面板:先只监听本机
启动时我特意加了 -l 127.0.0.1:25774,只让本机能访问:

访问根路径直接 307 跳到 /install,再看 /api/install/status,返回里 "required":true,也就是还没有管理员。
翻了一下面板日志,安装就是往 /api/install/complete 发一个 POST,带上用户名密码。这个接口在安装完成前不需要任何认证。我测的时候第一次请求体没写对,回了 400,改了再发,200,前后十几秒,管理员就有了。
换个角度想:如果面板一启动就监听在公网 0.0.0.0,域名解析又早就配好了,那这十几秒的窗口就是开放给所有人的。扫端口的机器人不一定认识 Komari,但这种事不能赌。
我的做法:
- 面板先绑 127.0.0.1;
- 本地电脑开 SSH 隧道
ssh -L 25774:127.0.0.1:25774 用户@服务器,浏览器打开http://127.0.0.1:25774走完安装; - 确认
/api/install/status里 required 变成 false 了,再放反向代理出去。
反向代理怎么配放下一篇,用的是 Caddy。
添加机器,接上 Agent
管理员建好以后,在后台添加一台机器,会生成一个 token。Agent 端这样启动:
./komari-agent -e http://127.0.0.1:25774 -t <token> --disable-auto-update

输出里有几处可以看一下。
第一行是个警告:could not maintain MOTD warning ... permission denied。我是用普通用户跑的 Agent,它想在 /etc 下写一个文件没写成。看文件名是登录提示(MOTD)相关,我没深究,不影响上报。
中间有一段 failed to dial,然后自己重试,attempt: 1 之后 WebSocket 连上了。测试时面板刚重启完还没起来,Agent 先连了一次,失败了等 5 秒重连。这个间隔就是帮助里 -c 那个默认 5 秒。
还有一处要留心:token 是放在 URL 的查询参数里的,?token= 这种。面板如果是 http 直连,token 就明文走在网络上;前面挂了反代、又开着访问日志的话,URL 里的 token 也可能被记下来。所以正式用,面板一定要上 https,日志里要么不记查询参数,要么别随手把日志发给别人看。
远程控制默认是开的
Agent 的帮助里有这么一个参数:

--disable-web-ssh,说明写的是关闭远程控制,括号里是 web ssh and rce。有"关闭"开关,说明默认是开着的。
也就是说,只要面板管理员账号被拿到,就能通过面板在每一台装了 Agent 的机器上开终端、跑命令。Agent 多半是 root 跑的,这等于把所有机器的 root 交给了面板的那个密码。
如果你只是想看监控图,这个功能用不上,启动参数里加上:
--disable-web-ssh
真需要网页终端的,至少把面板密码设长,面板只走 https。
顺带一个实用参数:--month-rotate,按月重置流量统计,填机器的流量重置日。不填的话流量会一直累加,看月流量用了多少不方便。
跑成服务
测试机上是前台跑的,正式机器写个 systemd 服务。Agent 那边大概是这样:
[Unit]
Description=Komari Agent
After=network-online.target
[Service]
ExecStart=/usr/local/bin/komari-agent -e https://你的面板域名 -t <token> --disable-web-ssh --disable-auto-update
Restart=always
[Install]
WantedBy=multi-user.target
--disable-auto-update 看个人,探针这类东西我更愿意看过更新说明再手动升。
上线前我会再看一眼的
面板 /api/install/status 返回 required:false;面板入口只有 https;每台 Agent 的启动命令里有没有 --disable-web-ssh。
三样都对了再把面板地址发出去。前两个是防面板被抢,第三个是防面板被抢以后的事。
- 点赞
- 收藏
- 关注作者
评论(0)