AI助手服务器管理工具

一个通过自然语言对话管理Linux VPS服务器上应用程序的MCP服务器工具,支持部署、重启、日志查看和命令执行。

  • by hegner123
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 hegner123/devops

使用说明

开发运维

A. 模型上下文协议 (MCP)服务器,允许AI助手管理在Linux VPS服务器上运行的应用程序。注册你的应用程序一次,然后部署、重启、检查日志,并通过自然对话运行命令。

为什么要用这个?

管理少数VPS服务器意味着不断在SSH会话之间切换,记住服务名称,并一遍又一遍地键入相同的部署序列。 devops 消除了这种摩擦:

  • 通过克劳德与您的服务器交谈。 “部署API,”“给我看工人的日志”“在prod上重新启动nginx”——所有这些都不需要打开终端。
  • 一个命令启动一个新的服务器。 SSH强化、防火墙、Docker日志轮换、自动安全更新——在几秒钟内应用,而不是数小时的手动配置。
  • 一切都经过审计。 每次命令执行都会记录到本地SQLite数据库中。你总是知道跑了什么,在哪里,什么时候。
  • 没有特工暴露在互联网上。 远程代理监听Unix套接字,只能通过经过身份验证的SSH访问。没有开放端口,没有API密钥可旋转,没有攻击面。

运作原理

单二进制,两种模式:

┌─────────────────────┐          SSH          ┌─────────────────────┐
│   Your machine      │   ──────────────────▶  │   Linux VPS         │
│                     │                        │                     │
│  Claude ◀──▶ devops │   SSH channel fwd      │  devops agent       │
│         (MCP stdio) │   ──────────────────▶  │  (unix socket HTTP) │
│                     │                        │                     │
│  SQLite (metadata)  │                        │  systemd / docker   │
└─────────────────────┘                        └─────────────────────┘

MCP模式(devops) 是默认值。它作为MCP服务器在您的计算机上运行,将应用程序元数据存储在SQLite中,并维护到您的服务器的持久SSH连接池。

代理模式(devops agent) 作为systemd服务在每个VPS上运行。它通过Unix套接字接受HTTP请求并执行操作(服务管理、部署、日志检索、任意命令)。

通信通过SSH通道转发进行——本地二进制文件通过SSH连接拨打Unix套接字。没有额外的端口,没有API令牌,没有要管理的TLS证书。

安全模型

远程代理以root身份运行(对于 systemctl 和 docker 这使得安全边界变得至关重要。以下是如何保持安全:

无网络暴露

代理程序仅在Unix套接字上侦听 /run/devops-agent/agent.sock 和 0600 权限。没有TCP侦听器。到达它的唯一方法是通过一个经过身份验证的SSH会话,该会话将通道转发到套接字。攻击者在不首先破坏SSH访问的情况下无法连接到代理。

SSH作为唯一的入口

所有身份验证和加密都由OpenSSH处理。该工具使用现有SSH密钥进行基于密钥的身份验证(~/.ssh/id_ed25519 或 ~/.ssh/id_rsa,可通过以下方式覆盖每个应用程序 key_path).已在引导的服务器上禁用密码身份验证。

引导服务器强化

当你引导一个新服务器时, devops 自动应用:

  • SSH硬化 --密码身份验证已禁用,键盘交互已禁用,root登录仅限于密钥,最多3次身份验证尝试,X11转发已禁用
  • 防火墙(UFW) --默认拒绝传入,只允许SSH(22)、HTTP(80)、HTTPS(443)
  • 自动安全更新 --仅为安全补丁配置无人值守升级,不自动重新启动
  • 内核调优 --TCP积压、连接重用、针对服务器工作负载优化的内存交换
  • Docker强化 --JSON文件日志记录,带旋转(10MB,3个文件),支持实时还原,覆盖2存储驱动程序

命令过滤

代理强制执行硬编码的安全不变量,在执行之前阻止危险的命令。通过提交的每个命令 /exec 或 /deploy 根据这些过滤器进行检查:

  • 破坏性命令 -- rm -rf /, mkfs, dd if=, shred, wipefs 总是被封锁。 rm -rf /opt/myapp 允许(路径感知检测)。
  • 防火墙篡改 --禁用、删除或刷新防火墙规则(ufw disable, iptables -F, nft flush等等)并阻止停止防火墙服务。
  • SSH中断 --停止或禁用 ssh/sshd 服务被阻止。
  • 电源命令 -- reboot, shutdown, halt, poweroff 默认情况下被阻止,但可以通过过滤器配置为每个主机启用。
  • 油孔开启 --除非端口在允许列表中,否则打开防火墙端口的命令将被阻止。
  • 自定义筛选器 --可以通过以下方式为每个主机添加其他模式 devops_filter_add 并通过以下方式同步到代理 devops_filter_sync.

被阻止的命令返回HTTP 403。过滤器不区分大小写 strings.Contains 匹配——这是深度防御,而不是沙盒。SSH身份验证仍然是主要的安全边界。

最小药剂表面

该代理仅公开10个HTTP端点: /ping, /filters, /exec, /service, /logs, /health, /discover, /deploy, /sync-apps,以及 /redeploy每个端点验证其输入并确定其操作范围。

输入验证

这两种模式都会验证所有输入:在执行任何操作之前,会根据严格的允许列表检查主机名、服务名、端口、路径和运行时。

安装

先决条件

  • 转到1.22+
  • 仅仅 (任务运行器,可选但推荐)
  • 通过SSH密钥身份验证对Linux VPS进行根访问。 在使用之前,您必须在服务器上安装SSH密钥 devops密码身份验证不受支持,也永远不会支持——该工具通过SSH以编程方式进行通信,这与交互式密码提示根本不兼容。如果您还没有设置基于密钥的访问,请先进行设置(ssh-copy-id root@your-server).

从源代码构建

git clone https://github.com/hegner123/devops.git
cd devops

# Build the binary
just build

# Install to your PATH
just install

无需手动构建 just:

# Local MCP binary (runs on your machine)
go build -o devops .

# Remote agent (same binary, cross-compiled for Linux)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o devops-linux-amd64 .

# Install
cp devops /usr/local/bin/devops

使用克劳德代码注册

claude mcp add --transport stdio devops -- /usr/local/bin/devops

入门

1.引导服务器

点 devops 在一个新的VPS。它将安装代理、强化SSH、配置防火墙并设置自动安全更新:

You: "Bootstrap my server at 203.0.113.10"
Claude: calls devops_bootstrap with host=203.0.113.10
→ installed 0.2.9, server configured

对于后续运行,引导程序会检测现有代理,并在有新版本可用时对其进行升级。

2.注册应用程序

告诉Claude您的服务器上运行的应用程序:

You: "Register my API app on 203.0.113.10. It's a Docker Compose service
      called 'api' at /opt/api with deploy commands: git pull, docker compose up -d"
Claude: calls devops_add
→ added app "api" on 203.0.113.10

或者自动导入现有部署——代理检查目录并发现运行时、服务、仓库URL和分支:

You: "Import whatever is running at /opt/api on 203.0.113.10, call it 'api'"
Claude: calls devops_import
→ discovered docker runtime, compose file, 2 services

3.管理您的应用程序

注册后,您可以按名称管理应用程序:

"Deploy the API"                         → devops_deploy
"Show me the API logs"                   → devops_logs
"Restart the API"                        → devops_restart
"What's the status of the API?"          → devops_status
"Check if the API health endpoint is up" → devops_health
"Run 'df -h' on the API server"          → devops_exec
"Stop the worker"                        → devops_stop

工具参考

工具 说明
devops_list 列出所有已注册的应用程序,可选择按主机筛选
devops_add 注册新应用程序(需要名称、主机、service_name)
devops_remove 注销应用程序(不影响正在运行的服务)
devops_update 更新应用程序的配置(支持部分更新)
devops_import 从目录中自动发现和导入现有部署
devops_status 从远程代理获取当前服务状态
devops_deploy 在服务器上运行带有流式输出的部署命令
devops_restart 重新启动服务(systemd或docker compose)
devops_stop 停止服务
devops_logs 检索最近的服务日志(默认值:50行)
devops_exec 在服务器上执行shell命令(支持管道、重定向)
devops_health 根据应用程序配置的健康URL进行HTTP健康检查
devops_bootstrap 在主机上安装或升级代理,并强化服务器
devops_version 返回工具版本
devops_filter_add 为主机添加自定义命令筛选器
devops_filter_list 列出自定义命令筛选器(可选按主机)
devops_filter_remove 删除自定义命令筛选器
devops_filter_sync 将筛选器和端口/重新启动/关闭设置同步到远程代理
devops_app_sync 将应用程序配置从本地数据库推送到远程代理以进行自我重新部署

应用程序配置

注册或更新应用程序时,以下字段可用:

字段 必填 默认 描述
name yes -- 应用程序的唯一标识符
host 是 -- 服务器主机名或IP
service_name 是 -- Systemd单元或Docker Compose服务名称
port 没有 22 SSH端口
user 无 root SSH用户
runtime 没有 docker docker 或 systemd
compose_file no -- docker-compose.yaml(docker运行时)的路径
repo_url 否 -- Git存储库URL
branch no main Git分支
deploy_dir no -- 执行部署命令的目录
binary_path no -- 二进制文件路径(systemd运行时)
health_check_url 没有用于健康检查的HTTP端点
deploy_commands 没有 [] 部署期间要运行的shell命令的JSON数组
notes 否 -- 自由格式元数据
key_path 没有 ~/.ssh/id_ed25519 SSH私钥路径(默认:~/.SSH/id_edu25519,回退:~/.sssh/id_rsa)

将代理部署到服务器

第一次(引导)

使用 devops_bootstrap它处理一切:配置文件、防火墙、代理二进制文件下载、systemd服务设置。

更新代理

要么跑 devops_bootstrap 再次(它检测现有代理并升级)或手动部署:

just agent-deploy your-server.com

这将构建Linux二进制文件,将其复制到服务器,并重新启动服务。

本地数据

应用程序元数据和命令审核日志存储在SQLite中:

$HOME/.local/share/devops/devops.db

用覆盖 DEVOPS_DB_PATH 环境变量。

发展

just test           # Run all tests
just build          # Build the binary
just clean          # Remove built binary

测试使用内存中的SQLite和模拟代理(Unix套接字httptest服务器)。不需要真正的SSH连接或远程主机。

平台支持

  • macOS(本地MCP工具)
  • Linux(本地MCP工具和远程代理)

不支持Windows。

许可证

麻省理工学院