Shell Server:安全Shell命令执行的MCP服务器

项目简介

Shell Server 是一个实现了 Model Context Protocol (MCP) 的后端服务器,它允许授权的 LLM 客户端通过标准化的 MCP 协议,安全地在服务器端执行预先配置的 Shell 命令。该服务器通过白名单机制和多重安全措施,确保只有允许的命令才能被执行,并防止潜在的 Shell 注入攻击。

主要功能点

  • 安全命令执行: 仅执行白名单中明确允许的命令,防止恶意命令的执行。
  • 标准输入支持: 允许通过标准输入 (stdin) 向命令传递数据。
  • 详细输出: 返回命令的标准输出 (stdout)、标准错误输出 (stderr)、退出状态码以及执行时间。
  • Shell 操作符安全: 对 Shell 操作符 (';', '&&', '||', '|') 后的命令同样进行白名单验证,确保安全性。
  • 超时控制: 可以设置命令的最大执行时间,防止长时间运行的命令占用资源。

安装步骤

  1. 确保你的Python环境满足要求 (Python 3.11 或更高版本)。

  2. 使用 pip 安装 'mcp-shell-server' 包:

    pip install mcp-shell-server

服务器配置

为了让 MCP 客户端 (例如 Claude.app) 连接到 Shell Server,你需要在客户端的配置文件中指定服务器的启动命令和参数。以下是配置示例,你需要根据你的实际环境进行调整。

Claude 客户端配置示例 (claude_desktop_config.json)

{
  "mcpServers": {
    "shell": {
      "command": "uvx",  // 启动命令,这里使用 uvx (或 uv,根据你的环境选择)
      "args": [
        "mcp-shell-server" // Shell Server 的启动参数,这里是执行 mcp-shell-server 命令
      ],
      "env": {
        "ALLOW_COMMANDS": "ls,cat,pwd,grep,wc,touch,find" // 环境变量,配置允许执行的命令白名单,多个命令用逗号分隔
      }
    },
  }
}

配置参数说明:

  • '"server name"': '"shell"' - 服务器名称,客户端通过此名称引用该服务器。
  • '"command"': '"uvx"' 或 '"uv"' - 用于启动 Shell Server 的命令。'uvx' 和 'uv' 是示例中使用的命令执行器,你可能需要根据你的环境调整为 'python' 或其他命令。
  • '"args"': '["mcp-shell-server"]' - 传递给启动命令的参数,这里指定运行 'mcp-shell-server'。
  • '"env"': '{ "ALLOW_COMMANDS": "ls,cat,pwd,grep,wc,touch,find" }' - 环境变量配置,'ALLOW_COMMANDS' 或 'ALLOWED_COMMANDS' 用于设置允许执行的 Shell 命令白名单。请根据你的需求修改白名单中的命令。

启动服务器

在安装 'mcp-shell-server' 后,你可以使用以下命令启动服务器。你需要设置 'ALLOW_COMMANDS' 环境变量来指定允许执行的命令。

ALLOW_COMMANDS="ls,cat,echo" uvx mcp-shell-server

或者使用 'ALLOWED_COMMANDS' 别名:

ALLOWED_COMMANDS="ls,cat,echo" uvx mcp-shell-server

基本使用方法

LLM 客户端 (如 Claude.app) 将通过 MCP 协议与 Shell Server 通信。客户端发送 JSON-RPC 请求来调用 'shell_execute' 工具,执行 Shell 命令。

以下是客户端请求的示例格式:

{
    "command": ["ls", "-l", "/tmp"] // 要执行的命令及其参数,以数组形式提供
}

更多请求参数和响应格式,请参考仓库的 README 文档。

安全性提示

  • 务必仔细配置 'ALLOW_COMMANDS' 环境变量,只添加必要的命令到白名单中,避免安全风险。
  • 建议在受控环境中使用 Shell Server,并限制对服务器的访问权限。

信息

分类

桌面与硬件