Back to MCP directory
publicPublicdnsLocal runtime

ssh-client-mcp

一个基于Model Context Protocol的SSH/SFTP服务器,允许AI助手通过SSH执行远程命令和进行SFTP文件操作,支持多服务器配置管理和多种认证方式。

article

README

🚀 SSH/SFTP MCP 服务器

SSH/SFTP MCP 服务器是一个基于模型上下文协议(MCP)的服务器,它允许像 Claude 这样的 AI 助手在远程服务器上执行 SSH 命令并进行 SFTP 文件操作。

🚀 快速开始

配置 Claude 桌面版

将以下配置添加到你的 Claude 桌面版配置文件中:

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

选项 1:命令行参数(推荐)

通过命令行参数直接配置服务器:

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": [
        "ssh-client-mcp",
        "--host", "192.168.1.100",
        "--user", "admin",
        "--password", "your-password"
      ]
    }
  }
}

使用私钥认证:

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": [
        "ssh-client-mcp",
        "--host", "192.168.1.100",
        "--user", "admin",
        "--key", "~/.ssh/id_rsa"
      ]
    }
  }
}

使用私钥 + 密码短语:

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": [
        "ssh-client-mcp",
        "--host", "192.168.1.100",
        "--user", "admin",
        "--key", "~/.ssh/id_rsa",
        "--passphrase", "your-key-passphrase"
      ]
    }
  }
}

可用的命令行参数:

| 参数 | 短参数 | 描述 | |------|-------|-------------| | --host | -h | 服务器主机名或 IP | | --port | -p | SSH 端口(默认:22) | | --user | -u | SSH 用户名 | | --password | | SSH 密码 | | --key | -k | 私钥文件路径 | | --passphrase | | 私钥密码短语 | | --id | | 服务器 ID(默认:"cli") | | --name | | 服务器显示名称 |

选项 2:配置文件

在工作目录中创建一个 servers.json 文件:

{
  "servers": [
    {
      "id": "my-server",
      "name": "My Server",
      "host": "192.168.1.100",
      "port": 22,
      "username": "admin",
      "password": "your-password"
    }
  ],
  "defaultServer": "my-server"
}

选项 3:环境变量

SSH_SERVER_DEV_HOST=192.168.1.100
SSH_SERVER_DEV_PORT=22
SSH_SERVER_DEV_USERNAME=admin
SSH_SERVER_DEV_PASSWORD=your-password
SSH_SERVER_DEV_NAME=Development Server

然后重启 Claude 桌面版以加载 MCP 服务器。

✨ 主要特性

  • 服务器配置管理:可以在配置文件或环境变量中定义服务器。
  • 连接测试:在建立会话之前测试服务器连接性。
  • SSH 命令执行:远程运行命令,支持可选的 sudo 权限。
  • SFTP 文件操作:可以上传、下载、列出、创建和删除文件/目录。
  • 会话管理:自动清理空闲会话,支持连接池。
  • 多种认证方法:支持密码和私钥认证。

📦 安装指南

使用 npx(推荐)

npx ssh-client-mcp

使用 npm

npm install -g ssh-client-mcp

从源代码安装

git clone https://github.com/veithly/ssh-client-mcp.git
cd ssh-client-mcp
npm install
npm run build

💻 使用示例

列出已配置的服务器

Tool: ssh_list_servers
Arguments: {}

测试连接

Tool: ssh_test_connection
Arguments: {
  "serverId": "my-server"
}

连接到服务器

Tool: ssh_connect_by_id
Arguments: {
  "serverId": "my-server"
}

执行命令

Tool: ssh_exec
Arguments: {
  "sessionId": "<session-id>",
  "command": "ls -la /home"
}

上传文件

Tool: sftp_upload
Arguments: {
  "sessionId": "<session-id>",
  "localPath": "/local/path/file.txt",
  "remotePath": "/remote/path/file.txt"
}

下载文件

Tool: sftp_download
Arguments: {
  "sessionId": "<session-id>",
  "remotePath": "/remote/path/file.txt",
  "localPath": "/local/path/file.txt"
}

📚 详细文档

可用工具(共 18 个)

服务器管理

| 工具 | 描述 | |------|-------------| | ssh_list_servers | 列出所有已配置的服务器 | | ssh_get_server | 获取特定服务器的详细信息 | | ssh_test_connection | 测试与服务器的连接 | | ssh_test_all_connections | 测试所有已配置的服务器 | | ssh_connect_by_id | 使用配置中的服务器 ID 进行连接 |

连接管理

| 工具 | 描述 | |------|-------------| | ssh_connect | 使用凭据建立 SSH 连接 | | ssh_disconnect | 关闭 SSH 会话 | | ssh_list_sessions | 列出所有活动的 SSH 会话 |

命令执行

| 工具 | 描述 | |------|-------------| | ssh_exec | 在远程服务器上执行命令 | | ssh_sudo_exec | 使用 sudo 权限执行命令 |

文件操作(SFTP)

| 工具 | 描述 | |------|-------------| | sftp_upload | 将本地文件上传到远程服务器 | | sftp_download | 从远程服务器下载文件 | | sftp_ls | 列出远程目录的内容 | | sftp_mkdir | 在远程服务器上创建目录 | | sftp_rm | 删除文件或目录 | | sftp_stat | 获取文件/目录信息 | | sftp_read | 读取远程文件的内容 | | sftp_write | 将内容写入远程文件 |

配置选项

环境变量

| 变量 | 描述 | 默认值 | |----------|-------------|---------| | SESSION_TIMEOUT | 会话超时时间(毫秒) | 1800000(30 分钟) | | MAX_SESSIONS | 最大并发会话数 | 100 | | SSH_CONNECTION_TIMEOUT | 连接超时时间(毫秒) | 30000 | | SSH_DEFAULT_SERVER | 默认服务器 ID | - |

服务器配置字段

| 字段 | 类型 | 是否必需 | 描述 | |-------|------|----------|-------------| | id | 字符串 | 是 | 唯一的服务器标识符 | | name | 字符串 | 是 | 显示名称 | | host | 字符串 | 是 | 主机名或 IP 地址 | | port | 数字 | 否 | SSH 端口(默认:22) | | username | 字符串 | 是 | SSH 用户名 | | password | 字符串 | 否* | SSH 密码 | | privateKeyPath | 字符串 | 否* | 私钥文件路径 | | passphrase | 字符串 | 否 | 私钥密码短语 | | description | 字符串 | 否 | 服务器描述 | | tags | 字符串数组 | 否 | 用于过滤的标签 |

*必须提供 passwordprivateKeyPath 中的一个。

安全注意事项

  • 会话在 30 分钟无活动后自动过期。
  • 最大会话限制可防止资源耗尽。
  • 凭据不会持久存储。
  • sudo 密码不会被记录。
  • 尽可能使用 SSH 密钥代替密码。

开发

# 克隆仓库
git clone https://github.com/veithly/ssh-client-mcp.git
cd ssh-client-mcp

# 安装依赖
npm install

# 构建
npm run build

# 监听模式
npm run dev

# 清理构建
npm run clean

项目结构

ssh-client-mcp/
├── src/
│   ├── index.ts              # MCP 服务器入口点
│   ├── types.ts              # 类型定义
│   ├── SessionManager.ts     # SSH 会话生命周期管理
│   ├── SSHExecutor.ts        # 命令执行
│   ├── SFTPOperations.ts     # SFTP 文件操作
│   ├── ConnectionTester.ts   # 连接测试
│   ├── config/
│   │   ├── ConfigManager.ts  # 配置管理
│   │   ├── types.ts          # 配置类型
│   │   └── index.ts          # 配置导出
│   └── tools/
│       ├── connection.ts     # 连接工具
│       ├── command.ts        # 命令工具
│       ├── file.ts           # 文件工具
│       ├── server.ts         # 服务器管理工具
│       └── index.ts          # 工具导出
├── servers.example.json      # 示例服务器配置
├── .env.example              # 示例环境配置
├── package.json
├── tsconfig.json
└── README.md

贡献

欢迎贡献代码!请随时提交拉取请求。

  1. 分叉仓库。
  2. 创建你的功能分支 (git checkout -b feature/AmazingFeature)。
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')。
  4. 推送到分支 (git push origin feature/AmazingFeature)。
  5. 打开拉取请求。

📄 许可证

本项目采用 MIT 许可证,版权所有 © 2024。

致谢


专为 Claude AI 设计

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client