SuperAPI AI 工具集

server-checkup

部署与运维

查看项目

更新于 10-16 02:04

技能介绍

用途

server-checkup 用于系统化地管理 Linux 服务器。它的核心工作方式是:在做出任何变更之前先捕获基线(baseline),变更之后再执行验证(verification),并生成维护文档。它强调的是有序、可度量、可追溯的服务器维护流程。

适用场景包括:

  • 设置新服务器或树莓派
  • 安全审计或加固
  • 对现有基础设施做健康检查
  • 重大变更前后(基线 → 验证)
  • 重新刷写系统后的配置

不适用场景:

  • 非 Linux 系统(macOS、Windows)
  • 云托管服务(应使用提供商工具)
  • 快速一次性命令(直接运行即可)

主要能力

执行模式

  • 交互模式(默认):逐步执行每个阶段,报告发现,并就修复方案询问决策。
  • 自动模式(高级):自动为每个阶段生成子代理。速度更快,但控制更少。触发方式为“full server audit”或“audit thoroughly”。

局部审计

  • security audit: → 仅阶段 0、2
  • setup maintenance: → 仅阶段 0、3
  • tailscale check: → 仅阶段 0、4

阶段工作流

阶段 0:上下文发现 先检查是否存在已有文档,例如通过 ls -la | grep -iE '(server|setup|readme|hostname)\.md' 和 ls -la .claude/CLAUDE.md 2>/dev/null 查找。若找到则读取并提取:应运行的服务、预期配置(端口、路径、版本)、已知问题、历史维护记录、揭示意图的设置步骤。将实际状态与文档状态对比,标记差异作为发现项。

阶段 1:连接与分诊 关键:在任何变更之前先捕获基线,例如:

echo "=== BASELINE $(date +'%Y-%m-%d %H:%M') ===" | tee /tmp/server-baseline.txt
echo "Memory:" | tee -a /tmp/server-baseline.txt
free -h | tee -a /tmp/server-baseline.txt
# ... 磁盘、包数、运行服务数

系统发现包括检查错误(dmesg)、硬件与操作系统(uname、os-release、free、df、dpkg 包计数)。初始评估:记录异常错误、检查磁盘空间是否超过 80%、可用内存是否低于 500MB。

阶段 2:安全审计 SSH 配置检查目标:

  • PasswordAuthentication no ✅
  • PermitRootLogin no ✅
  • X11Forwarding no ✅(无头服务器)

Sudo 配置检查 /etc/sudoers.d/;网络暴露检查监听端口(排除 127.0.0.0 与 tailscale)以及防火墙状态(ufw 或 iptables)。安全评分会自动应用,例如启用密码认证为 CRITICAL,无防火墙 + 端口转发 + 外部暴露为 HIGH,无防火墙 + NAT 后 + 仅 VPN 为 LOW,无头服务器开启 X11Forwarding 为 MEDIUM。

阶段 3:维护设置 检查 unattended-upgrades 是否安装,如缺失则 sudo apt install unattended-upgrades。审查配置(Allowed-Origins、Remove、Automatic-Reboot)。目标配置:覆盖所有包(非仅安全)、启用自动重启并指定具体时间、移除未使用包、包含自定义仓库(Tailscale、Plex 等)。验证服务状态并确认重启时间已取消注释。

阶段 4:Tailscale(如适用) 检查是否安装及版本,检查状态(self、exit node、subnet),验证 IP 转发已持久化(/etc/sysctl.d/99-tailscale.conf 应包含 net.ipv4.ip_forward = 1 与 net.ipv6.conf.all.forwarding = 1)。设置后提醒在管理控制台为常开节点禁用密钥过期。

阶段 5:清理 识别不必要包(如 man-db、bluetooth/bluez、avahi、pulseaudio、alsa),检查不必要服务(bluetooth、avahi、serial-getty)。常见移除项:man-db(拖慢 apt 更新)、avahi-daemon(使用 Tailscale/静态 IP 时无需 mDNS)、bluetooth 包(服务器不用)、serial-getty(无头不需要)。子代理决策矩阵:移除 1-2 个包不用子代理,移除 5+ 个包用子代理;检查 1-2 个服务不用,完整服务审计用。规则:若操作产出超过 200 行,使用子代理。使用简洁输出避免上下文耗尽。

阶段 6:验证 与基线对比(内存、磁盘、包数、运行服务数)。关键服务检查(ssh、tailscale、docker、NetworkManager、unattended)。最终汇总并展示改进:释放的内存、节省的磁盘空间、移除的包、禁用的服务。

阶段 7:报告生成 创建维护记录。选项 A:追加到阶段 0 找到的现有服务器文档。选项 B:新建 MAINTENANCE-YYYY-MM-DD.md,包含执行摘要、关键问题、安全审计、维护设置、已应用变更、系统健康(前后对比)、服务清单、建议。

风险评分

每个发现会被自动评分,维度包括安全影响、影响范围(本地 vs 网络 vs 互联网)、利用难度。风险等级与处理时限:

  • CRITICAL:可远程利用、特权访问 → 立即修复
  • HIGH:暴露 + 缺少安全控制 → 当天修复
  • MEDIUM:不必要的攻击面、有限暴露 → 本周修复
  • LOW:优化项、最小风险 → 可选清理

上下文管理

问题:apt 输出、服务列表和包查询会耗尽上下文。解决方案:1)始终使用简洁输出(如 | tail -10);2)对冗长操作使用子代理;3)变更前捕获基线;4)单命令批处理(一次 apt remove 多个包)。

使用方式

用法示例:

  • check this server: kube.lan (user: admin) — 完整审计
  • security audit: vps01 (user: root) — 仅安全审计
  • full server audit: production-db — 自动模式
  • check this server: kube.lan, skip tailscale — 跳过某阶段

快速参考(常见命令)

无密码 sudo:

echo "<user> ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/010_<user>-nopasswd
sudo chmod 440 /etc/sudoers.d/010_<user>-nopasswd

SSH 加固配置:

cat <<'EOF' | sudo tee /etc/ssh/sshd_config.d/99-hardening.conf
PasswordAuthentication no
PermitRootLogin no
X11Forwarding no
EOF
sudo sshd -t && sudo systemctl reload sshd

查找 unattended-upgrades 仓库来源、禁用不必要服务(sudo systemctl disable --now <service-name>)。

参考资料

references/ 目录中提供:unattended-upgrades.md、packages-to-remove.md、ssh-hardening.md、terminal-compat.md。

反模式

  • 流式输出完整 apt 输出 → 上下文耗尽,使用 | tail -10 或子代理
  • 逐个移除包 → 慢且冗长,使用单次 apt remove 多个包
  • 跳过基线 → 无法衡量改进,务必在变更前捕获
  • 忘记重启时间 → 白天立即重启,验证已取消注释且时间合理
  • 变更后才检查配置 → 无法对比,先基线后变更
  • 不记录变更 → 未来混乱,始终生成或更新维护文档

限制

该技能明确不适用于非 Linux 系统、云托管服务和一次性快速命令。具体收费、价格与商业条款暂未提供。