答案是基于SSH免密登录的轻量级分布式巡检方案:中心机统一调度,被巡机仅执行30行内check.sh脚本,通过tab分隔采集负载、内存、磁盘、服务状态及失败登录等指标,超时控制、并发限流、阈值告警、HTML报表生成与定时任务集成完整。

核心是“一台中心机统一调度 + 每台被巡机轻量响应”,不装代理、不共享密钥、不依赖远程 Python 环境,只要 SSH 通、sshd 开、密钥登录配好,就能跑起来。
准备中心机与免密登录
在中心巡检机上生成无密码密钥:ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ''
用 ssh-copy-id user@ip 把公钥推到每台目标主机(如 admin@192.168.10.10)。
验证:执行 ssh admin@192.168.10.10 uptime 不输密码即成功。
把所有目标主机 IP 和用户名写进 hosts.txt,每行格式:192.168.10.10 admin
不存密码,更安全。
编写极简远程采集脚本(check.sh)
这个脚本只运行在被巡主机上,不处理告警、不写日志、不依赖额外工具,30 行内搞定:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 查系统负载:
uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/^[[:space:]]*//' - 查内存使用率:
free | awk '/Mem:/ {printf "%.0f", $3/$2*100}' - 查根分区磁盘使用率:
df / | awk 'NR==2 {print int($5)}' - 查关键服务状态:
systemctl is-active sshd 2>/dev/null || echo "unknown" - 查近期失败登录次数:
lastb -n 5 2>/dev/null | wc -l - 所有字段用 TAB 分隔,首行为字段名,例如:
HOST\t192.168.10.10\tLOAD\t1.2\tMEM_PCT\t78\tDISK_PCT\t65\tSSHD\tactive\tFAILED_LOGIN\t0
中心机汇总与判异(shellsh.sh)
读取 hosts.txt,逐台 SSH 执行 check.sh,超时控制、并发限流、异常标记全在这里做:
- 用
ssh -o ConnectTimeout=5 -o BatchMode=yes user@ip 'bash -s' < check.sh直接传脚本执行,不依赖远程文件 - 并发最多 5 路:
ssh ... & ((i++ % 5 == 0)) && wait - 随机错峰启动:
sleep $((RANDOM % 120)),避免集中连接被拒绝 - 定义全局阈值:
MEM_WARN=85、DISK_WARN=90,统一配置,方便维护 - 首次异常才发邮件:用
/tmp/last_alert_192.168.10.10记时间戳,防刷屏 - 结果拼成 HTML 表格:
cat > report.html,绿色正常、黄色预警、红色异常,不用模板引擎
定时运行与日志管理
用 crontab 控制频率,例如每小时整点执行:
0 * * * * /path/to/shellsh.sh > /dev/null 2>&1- 日志按天命名:
/var/log/inspect/alert_$(date +\%Y\%m\%d).log - 配合 logrotate 按周轮转,保留 7 天,不手动清理
- 日报自动覆盖当日
report.html,浏览器直接打开查看

















