项目简介

SSH MCP 服务器是一个本地的 Model Context Protocol (MCP) 服务器,它通过 SSH 协议向 LLM 客户端(如 Claude Desktop、Cursor 等)暴露了远程 Linux 和 Windows 系统的控制能力。LLM 客户端可以通过调用本服务器提供的工具,以自然语言的方式安全地在远程机器上执行 Shell 命令。

主要功能点

  • MCP 协议兼容: 完全遵循 Model Context Protocol 标准,支持 LLM 客户端进行上下文交互。
  • 远程 Shell 命令执行: 允许 LLM 在远程 Linux 或 Windows 系统上执行任意 Shell 命令。
  • Sudo 命令支持: 提供了 'sudo-exec' 工具,支持以 sudo 权限执行命令,可选配置 sudo 密码。
  • 安全认证: 支持通过密码或 SSH 密钥进行安全的远程连接认证。
  • 超时保护: 可配置命令执行的超时时间,超时后会自动尝试终止挂起的进程,确保会话的稳定。
  • 命令长度限制: 可配置允许的最大命令字符数,防止超长命令的意外执行。
  • TypeScript 构建: 使用 TypeScript 和官方 MCP SDK 开发,提供良好的代码质量和可维护性。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/tufantunc/ssh-mcp.git
    cd ssh-mcp
  2. 安装依赖:
    npm install
    这将安装运行服务器所需的所有 Node.js 依赖。

服务器配置

MCP 客户端通常需要配置一个 MCP 服务器的启动命令 (command) 及其参数 (args) 才能与服务器建立连接。以下是本 SSH MCP 服务器的常用配置信息和参数说明:

  • 服务器名称 (Server Name): 例如,在 MCP 客户端配置中,您可以将此服务器命名为 'ssh-mcp'。
  • 启动命令 (Command): 通常为 'npx',因为它允许直接运行 'ssh-mcp' 包而无需全局安装。
  • 命令参数 (Arguments): 这是一个参数列表,用于向 'npx ssh-mcp' 命令传递具体的 SSH 连接和服务器行为设置。这些参数定义了本服务器如何连接到您的远程 SSH 主机:
    • '--host=<HOSTNAME_OR_IP>':远程 Linux 或 Windows 服务器的主机名或 IP 地址(必填)。
    • '--user=<USERNAME>':用于 SSH 连接的用户名(必填)。
    • '--port=<PORT>':SSH 端口号(默认值:'22')。
    • '--password=<PASSWORD>':SSH 密码(用于密码认证,或使用 '--key' 进行密钥认证)。
    • '--key=<PATH_TO_PRIVATE_KEY>':私钥文件的路径(用于 SSH 密钥认证)。
    • '--sudoPassword=<SUDO_PASSWORD>':执行 sudo 命令时所需的密码。
    • '--suPassword=<SU_PASSWORD>':获得持久性 root shell 所需的密码。
    • '--timeout=<MILLISECONDS>':命令执行的超时时间,单位毫秒(默认值:'60000'ms,即 1 分钟)。
    • '--maxChars=<NUMBER_OR_NONE>':允许命令输入的最大字符数(默认值:'1000')。设置为 'none' 或 '0' 可禁用此限制。
    • '--disableSudo':一个标志,用于完全禁用 'sudo-exec' 工具。

示例(以 Claude Code 客户端为例):

您可以通过如下命令将 SSH MCP 服务器添加到 Claude Code 客户端中,并配置其连接到您的远程主机。请将括号内的占位符替换为实际值。

claude mcp add --transport stdio ssh-mcp -- npx -y ssh-mcp -- \
--host=YOUR_HOST_IP_OR_HOSTNAME \
--user=YOUR_SSH_USERNAME \
--password=YOUR_SSH_PASSWORD \
--timeout=120000 \
--maxChars=none

(您也可以选择使用 '--key' 参数进行密钥认证,或者添加 '--sudoPassword' 等参数。)

基本使用方法

配置并启动 SSH MCP 服务器后,您的 LLM 客户端(如 Claude Code)将能够与它通信。您可以通过自然语言向 LLM 提出请求来执行远程命令:

  1. 验证安装: 重新启动您的 LLM 客户端。
  2. 向 LLM 提问: 询问您的 LLM 客户端执行一个远程命令,例如:
    • "Can you run ''ls -la'' on the remote server?" (你能否在远程服务器上运行 ''ls -la'' 命令?)
    • "Execute ''df -h'' to check disk space." (执行 ''df -h'' 来检查磁盘空间。)
    • "Using sudo, install nginx on the remote server." (使用 sudo,在远程服务器上安装 Nginx。)

LLM 客户端会识别并调用 SSH MCP 服务器的相应工具(如 'exec' 或 'sudo-exec')来执行这些命令,并将结果返回给您。

信息

分类

开发者工具