项目简介

此MCP服务器是一个基于Model Context Protocol (MCP) 构建的后端应用,旨在使AI助手(如Claude)能够安全地连接远程Linux服务器,执行诊断、命令执行、服务管理和安全审计等任务。所有操作都会生成完整的审计日志,以确保安全性和合规性,为系统管理员提供智能化的服务器管理能力。

主要功能点

  • SSH连接管理: 建立和测试到远程Linux服务器的安全SSH连接。
  • 命令执行: 在远程服务器上运行任意Shell命令,并捕获完整的输出结果。
  • 系统诊断: 执行全面的系统健康检查,包括CPU、内存、磁盘和网络状态等关键指标。
  • 服务管理: 轻松启动、停止、重启、启用或禁用远程服务器上的系统服务。
  • 日志分析: 高效地搜索和分析远程服务器上的日志文件,帮助快速发现并解决问题。
  • 网络诊断: 测试远程服务器的网络连通性并执行路由追踪、端口扫描等排查网络问题。
  • 软件包管理: 使用远程服务器上对应的包管理器(如apt、yum、dnf等)安装所需的软件。
  • 安全审计: 深入检查用户权限、开放端口、防火墙规则、SSH配置和潜在的安全配置漏洞。
  • 操作审计追踪: 完整记录所有通过MCP服务器执行的命令、执行结果、时间戳和操作用户,并按主机名每日轮换日志文件,便于追溯和合规性要求。
  • 运行时凭证: 支持在工具调用时动态传递SSH连接所需的密码或密钥路径,无需在服务器中永久存储敏感的SSH凭证。

安装步骤

  1. 克隆仓库: 打开终端或命令提示符,执行以下命令克隆项目仓库:

    git clone https://github.com/Cosmicjedi/linux-administration-mcp.git
    cd linux-administration-mcp
  2. 构建Docker镜像: 在项目根目录下,执行以下命令构建MCP服务器的Docker镜像:

    docker build -t linux-admin-mcp-server .

    此命令会创建一个名为 'linux-admin-mcp-server' 的Docker镜像。

  3. 创建自定义MCP服务器配置目录: 创建用于存放MCP服务器目录文件的文件夹(如果不存在):

    mkdir -p ~/.docker/mcp/catalogs
  4. 创建自定义服务器定义文件 ('~/.docker/mcp/catalogs/custom.yaml'): 此文件向MCP客户端描述了您的MCP服务器及其提供的工具。将以下内容保存到 '~/.docker/mcp/catalogs/custom.yaml' 文件中。 请确保 'image: linux-admin-mcp-server:latest' 中的镜像名称与您在步骤2中构建的镜像名称一致。

    version: 2
    name: custom
    displayName: Custom MCP Servers
    registry:
      linux-admin:
        description: "高级SSH Linux服务器管理与审计日志"
        title: "Linux 管理"
        type: server
        dateAdded: "2025-01-01T00:00:00Z"
        image: linux-admin-mcp-server:latest
        ref: ""
        readme: ""
        toolsUrl: ""
        source: ""
        upstream: ""
        icon: ""
        tools:
          - name: ssh_connect_test
          - name: ssh_execute
          - name: ssh_diagnose_system
          - name: ssh_check_service
          - name: ssh_manage_service
          - name: ssh_analyze_logs
          - name: ssh_network_diagnostics
          - name: ssh_install_package
          - name: ssh_check_security
          - name: view_command_logs
          - name: get_log_status
        environment:
          - name: LOG_DIR
            value: "/mnt/logs"
            required: false
            description: "审计日志存储目录(可选,默认为/tmp/linux-admin-logs)"
        volumes:
          - host: "C:\\logs:/mnt/logs" # 这是一个示例,实际的宿主机路径在MCP客户端配置中指定
        metadata:
          category: monitoring
          tags:
            - linux
            - ssh
            - administration
            - monitoring
            - security
            - audit
          license: MIT
          owner: local
  5. 更新MCP注册表文件 ('~/.docker/mcp/registry.yaml'): 将以下内容添加到您的 '~/.docker/mcp/registry.yaml' 文件末尾,以注册您的自定义服务器:

      linux-admin:
        ref: ""
  6. 配置Claude Desktop (或其它MCP客户端): 编辑Claude Desktop的配置文件。此文件通常位于:

    • macOS: '~/Library/Application Support/Claude/claude_desktop_config.json'
    • Windows: '%APPDATA%\Claude\claude_desktop_config.json'
    • Linux: '~/.config/Claude/claude_desktop_config.json'

    在文件的 '"mcpServers"' 部分,找到或创建 '"mcp-toolkit-gateway"' 的配置。您需要修改其中的 '"args"' 列表,确保包含 '"--catalog=/mcp/catalogs/custom.yaml"',并且根据您的操作系统正确配置卷挂载 '-v' 参数,以便日志可以持久化存储在您的宿主机上。

    重要的卷挂载说明:

    • '"-v", "/Users/YourUsername/.docker/mcp:/mcp"': 请将 '/Users/YourUsername' 替换为您的实际用户目录。Windows系统上通常是 'C:\Users\YourUsername'。
    • '"-v", "/var/log/linux-admin:/mnt/logs"': 这是日志持久化的关键。 请将 '/var/log/linux-admin' 替换为您希望存储审计日志的宿主机目录。Windows系统上,这可能是 'C:\logs' 或其他自定义路径。您需要确保该目录在宿主机上存在。

    例如 (macOS/Linux):

    {
      "mcpServers": {
        "mcp-toolkit-gateway": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-v", "/var/run/docker.sock:/var/run/docker.sock",
            "-v", "/Users/YourUsername/.docker/mcp:/mcp",
            "-v", "/var/log/linux-admin:/mnt/logs",
            "docker/mcp-gateway",
            "--catalog=/mcp/catalogs/docker-mcp.yaml",
            "--catalog=/mcp/catalogs/custom.yaml",
            "--config=/mcp/config.yaml",
            "--registry=/mcp/registry.yaml",
            "--tools-config=/mcp/tools.yaml",
            "--transport=stdio"
          ]
        }
      }
    }
  7. 创建日志目录(推荐): 在您的宿主机上创建您在步骤6中配置的日志目录(例如 '/var/log/linux-admin' 或 'C:\logs')。这对于持久化审计日志数据非常重要。

    • macOS/Linux: 'sudo mkdir -p /var/log/linux-admin && sudo chmod 755 /var/log/linux-admin'
    • Windows: 'mkdir C:\logs'
  8. 重启Claude Desktop: 完全退出并重新启动Claude Desktop。现在,"Linux Administration" 工具应该在Claude的工具列表中可见并可用。

服务器配置信息 (供MCP客户端使用)

MCP客户端(例如Claude Desktop)通过MCP Gateway与MCP服务器进行通信。客户端需要配置MCP Gateway的启动命令及其参数,以便Gateway能够正确启动和管理您的Linux管理MCP服务器。

以下是您需要在MCP客户端配置文件中添加或修改的JSON配置信息,其中包含对每个参数的注释:

{
  "mcpServers": {
    "mcp-toolkit-gateway": {
      "command": "docker",
      "args": [
        "run",
        "-i",                 // Docker参数:以交互模式运行
        "--rm",               // Docker参数:容器停止后自动删除
        "-v", "/var/run/docker.sock:/var/run/docker.sock", // 卷挂载:允许Gateway访问宿主机Docker守护进程
        // 以下卷挂载路径请根据您的操作系统和实际目录进行修改:
        "-v", "/Users/YourUsername/.docker/mcp:/mcp",       // 卷挂载:将宿主机MCP配置目录挂载到Gateway容器的/mcp
        "-v", "/var/log/linux-admin:/mnt/logs",             // 卷挂载:将宿主机日志目录挂载到MCP服务器容器的/mnt/logs (用于日志持久化)
        "docker/mcp-gateway", // 要运行的MCP Gateway Docker镜像
        "--catalog=/mcp/catalogs/docker-mcp.yaml",  // 引入默认的MCP服务器目录
        "--catalog=/mcp/catalogs/custom.yaml",      // 引入您自定义的Linux管理MCP服务器目录
        "--config=/mcp/config.yaml",                // Gateway配置文件的路径
        "--registry=/mcp/registry.yaml",            // Gateway注册表文件的路径
        "--tools-config=/mcp/tools.yaml",           // Gateway工具配置文件的路径
        "--transport=stdio"                         // Gateway与客户端之间使用标准I/O进行通信
      ]
    }
  }
}

请注意:

  • '"/Users/YourUsername/.docker/mcp"' 在Windows上通常是 'C:\Users\YourUsername\.docker\mcp'。
  • '"/var/log/linux-admin"' 是宿主机上的日志目录,您应将其替换为您实际创建的日志目录,例如Windows上的 'C:\logs'。

基本使用方法

在MCP服务器和MCP客户端配置完成后,您可以在AI助手(如Claude Desktop)的聊天界面中,使用自然语言直接调用Linux管理工具。MCP服务器支持多种认证方式,您可以在调用工具时提供凭证:

  • 密码认证: 在指令中直接提供用户名和密码。
  • SSH密钥认证: 指定SSH密钥文件的路径。
  • 系统默认SSH密钥: 如果未提供特定凭证,服务器将尝试使用宿主机上的默认SSH密钥(如 '~/.ssh/id_rsa')。

以下是一些使用示例指令,您可以在Claude Desktop中尝试:

  • 基本连接测试: '"Test SSH connection to server 192.168.1.100 with username admin and password secret123"' (测试到 '192.168.1.100' 服务器的SSH连接,使用 'admin' 用户和密码 'secret123')
  • 执行系统诊断: '"Run full diagnostics on database server at 10.0.0.5 using password authentication"' (使用密码认证,对 '10.0.0.5' 上的数据库服务器进行全面诊断)
  • 服务管理操作: '"Restart MySQL on database.local using root account"' (使用 'root' 账户重启 'database.local' 上的MySQL服务) '"Check the nginx service status on production server (use admin account with password)"' (检查 'production server' 上Nginx服务的状态(使用带有密码的 'admin' 账户))
  • 安装软件包: '"Install htop on server1.example.com (connect as admin)"' (在 'server1.example.com' 上安装 'htop' (以 'admin' 用户连接))
  • 安全审计: '"List all users with sudo access on prod-server"' (列出 'prod-server' 上所有具有sudo权限的用户)
  • 日志分析: '"Find errors in the Apache logs on webserver"' (在 'webserver' 的Apache日志中查找错误) '"Show me the last 100 lines of nginx error log"' (显示Nginx错误日志的最后100行)
  • 网络诊断: '"Test connectivity from web-server to database-server"' (测试从 'web-server' 到 'database-server' 的网络连通性)
  • 查看审计日志: '"Show me all commands executed on production-server"' (显示在 'production-server' 上执行过的所有命令) '"Get the current log status"' (获取当前的日志配置和统计信息)

信息

分类

开发者工具