Kastell 是一款面向自托管服务器的安全审计与加固命令行工具,定位为“自托管基础设施的 DevOps 安全层”。它试图解决服务器安全工具碎片化的问题:Lynis 只扫描不修复,OpenSCAP 功能强大但复杂,自定义脚本难以维护。Kastell 用一个 CLI 完成审计、修复、加固与监控。
用途与定位 Kastell 覆盖服务器全生命周期:开通(provision)、安全加固、备份、恢复与管理。它可扫描服务器、应用安全修复、按生产标准锁定配置,并持续监控。工具从第一天起就是 AI 原生:内置 MCP 服务器,Claude、Cursor 或任何兼容 MCP 的 AI 代理可直接管理服务器,从提示词到生产加固只需数秒。
主要能力
- 安全审计与加固:支持 SSH、防火墙、Docker、TLS 等加固,并映射 CIS、PCI-DSS、HIPAA 合规基线。
- 服务器开通:自动处理服务器开通、SSH 密钥设置、防火墙配置与平台安装。
- 更新与维护、备份与恢复、监控与调试:提供 update、maintain、logs、health 等命令,跨平台统一。
- 多服务器管理(fleet management)与取证证据收集。
- 交互式菜单:不带参数运行 kastell 会启动带渐变 ASCII 横幅的交互式搜索菜单,按 emoji 分类浏览操作、输入即时过滤、逐步配置选项,无需记忆命令名或参数。每个操作含子选项(服务器模式、模板、日志来源、端口号等)和返回主菜单选项。已知命令也可直接使用。
- 平台适配器架构:同一组命令(update、maintain、logs、health)适用于所有平台,平台信息存储在服务器记录中并在每次命令时自动检测。
- 支持多种云服务商,价格反映至少 2 GB 内存的最便宜方案(Coolify 和 Dokploy 要求);Bare 模式无最低要求,方案起价约 $2.50/月,具体取决于服务商;Linode 支持处于 beta 阶段。
使用方式
- 安装与运行:需要 Node.js 20 或更高版本。不带参数运行 kastell 进入交互式菜单;也可直接使用命令。
- 配置文件部署:支持用单个配置文件部署。
- CI/CD 集成:在 CI 流水线中使用 kastell audit 强制执行安全基线,--threshold 标志在分数低于目标时返回非零退出码,自动使 CI 任务失败。
- MCP 服务器:内置 Model Context Protocol 服务器,适用于 Claude Code、Cursor、Windsurf 等兼容 MCP 的客户端。所有破坏性操作(destroy、restore、snapshot-delete、provision、restart、maintain、snapshot-create)需要 SAFE_MODE=false 才能执行。
- Claude Code 插件:可在 Anthropic 市场获取,包含 4 个技能(kastell-ops 架构参考、kastell-scaffold 组件生成、kastell-careful 破坏性操作防护、kastell-research 代码库探索)、2 个代理(kastell-auditor 并行审计分析器、kastell-fixer 工作树隔离自动修复)、5 个钩子(destroy-block、session-audit、session-log、pre-commit-audit-guard、stop-quality-check)。可通过 Claude Code 插件管理器安装,或用 claude --plugin-dir kastell-plugin 直接使用。
- AI 可发现性:提供 llms.txt 供 AI 爬虫使用,并在 MCP Registry 中登记为 io.github.kastelldev/kastell。
安全设计 Kastell 以安全为优先:380 个套件共 12,132 项测试,含专门的安全测试套件。API 令牌从不写入磁盘,运行时提示或通过环境变量提供;SSH 密钥按需自动生成(Ed25519);所有 SSH 连接使用 StrictHostKeyChecking=accept-new 并带 IP 校验(八位组范围)与环境过滤;所有面向用户的输入有 shell 注入防护(使用 spawn/spawnSync,不用 execSync);服务商错误消息经过净化以防令牌泄露;stderr 净化会从错误输出中隐去 IP、主目录路径、令牌和密钥;配置文件令牌检测(22+ 键模式,不区分大小写,支持嵌套);导入/导出操作剥离敏感字段并强制严格文件权限(0o600);--full-setup 自动启用 UFW 防火墙和 SSH 加固;MCP 的 SAFE_MODE(默认开启)阻止所有破坏性操作,所有输入经 Zod schema 校验,备份恢复有路径遍历防护;Claude Code 钩子中 destroy-block 防止未加 --force 的意外 kastell destroy,pre-commit audit guard 在分数下降时警告。零遥测——不收集使用数据、分析或遥测,服务器数据不离开本机。
安全行为(v2.3.1)
- KASTELL_STRICT_HOST_KEY=true:设置后 Kastell 直接拒绝未知 SSH 主机密钥。直接 SSH 连接(即通过 accept-new 的连接)会发出一次性 TOFU 警告;与 KASTELL_STRICT_HOST_KEY=true 结合时,警告升级为硬错误。
- 非 TTY 破坏性命令:在非交互环境(CI、脚本、自动化)中,破坏性操作需要显式 --force 标志或命令文档化的选择加入标志,否则以非零状态和明确错误退出。
- 结构化跳过检查:被跳过的检查(如与 VPS 无关、平台不匹配、缺少前置条件)在审计输出中显示为中性可见结果,而非被静默丢弃,操作者可看到哪些检查未运行及原因。
- Windows 秘密文件:Kastell 在 Windows 上写入的含密文件获得限制性 ACL(仅所有者访问);Linux/macOS 上 0o600 POSIX 权限仍是事实来源,Windows 使用等效 DACL。
- QuickWin JSON 结构:audit --json 的 QuickWin 条目现在包含稳定的 id(检查 ID)和 severity 字段,以及现有的 description 和 commands,便于程序化消费。
- FORBIDDEN 预览含原因:用 --dry-run(或通过 server_fix MCP dry-run)预览修复时,每个 FORBIDDEN 层级修复会渲染简短原因,说明为何被归类为 FORBIDDEN(如“需要重启”“会中断活动 SSH 会话”),原因来自检查的 forbiddenReason 字段。
SAFE_MODE 环境变量 KASTELL_SAFE_MODE 控制破坏性操作:MCP 默认 true(provision、destroy、restore 被阻止);CLI 默认 false(所有操作启用);覆盖方式 KASTELL_SAFE_MODE=true kastell destroy <server> 会被拒绝。受影响命令:init、destroy、backup-restore、snapshot-restore、snapshot-delete、restart、maintain。
v2.3 可靠性契约 适用于 CLI 和 MCP 服务器。开通行为:server_provision 在服务商创建服务器且 Kastell 持久注册后返回,readiness.status 可能为 pending,需随后用 server_info status 或 server_info health 跟进;交互式 kastell init 命令继续等待其现有就绪检查。自动化契约:不支持和失败的 CLI 操作返回退出码 1;有效的空结果和用户取消返回 0;混合 --all 失败返回 1;audit --json 和 audit --ci 保留 stdout 用于单个 JSON 负载。
故障排除 服务器创建失败?运行 kastell doctor --check-tokens 验证 API 令牌和本地环境。服务器无响应?用 kastell status my-server --autostart 检查平台状态并在需要时自动重启,或用 kastell health 一次检查所有服务器。需要重新开始?kastell destroy my-server 会完全移除云服务器。
适用场景与限制 适用于需要自托管服务器安全审计、加固、合规映射、批量管理与 AI 代理集成的运维与 DevOps 场景。限制:需要 Node.js 20 或更高版本;Linode 支持处于 beta;MCP 平台设置中更多平台(JetBrains、Windsurf、Gemini 等)计划在 v2.0 提供;破坏性操作在非交互环境需显式标志;MCP 默认阻止破坏性操作。项目采用 Apache 2.0 许可,由 @omrfc 构建。