Skip to main content
Glama
honwee

SSH MCP Server

by honwee
README.md
# SSH MCP Server

高效的 SSH 远程运维 MCP 服务。让 AI 工具通过 MCP 协议管理 SSH 连接、执行命令、传输文件。

## 功能

| Tool | 说明 |
|------|------|
| `ssh_connect` | 建立 SSH 连接(支持跳板机) |
| `ssh_disconnect` | 断开连接 |
| `ssh_exec` | 执行单条命令 |
| `ssh_exec_script` | 执行多行脚本 |
| `sftp_read` | 读取远程文件 |
| `sftp_write` | 写入远程文件 |
| `sftp_list` | 列出远程目录 |
| `ssh_status` | 查看所有连接状态 |
| `ssh_history` | 查询操作历史日志 |
| `ssh_analyze` | 一键诊断远程服务器 |
| `ssh_logs` | 日志查询与增量监控(file/journalctl/docker) |
| `ssh_host_add` | 保存服务器配置(支持备注和标签) |
| `ssh_host_remove` | 删除已保存的服务器 |
| `ssh_host_list` | 列出所有已保存的服务器 |
| `ssh_host_update` | 更新服务器备注/标签(AI 知识积累) |

### 核心特性

- **连接池管理** — 持久化连接,避免重复建连
- **跳板机支持** — 通过 jump host 连接内网服务器
- **多认证方式** — 密码 / 私钥
- **SFTP 文件操作** — 读写文件、浏览目录
- **空闲超时清理** — 30 分钟无活动自动断开
- **多行脚本执行** — 通过 `bash -s` 执行复杂脚本
- **持久化操作日志** — 所有操作记录到 `~/.ssh-mcp/logs/operations.jsonl`,支持 AI 溯源
- **一键服务器诊断** — 系统信息、资源、网络、Docker、GPU 全面检查

## 安装

```bash
npm install -g @honwee/ssh-mcp-server
```

或者直接通过 npx 使用(无需全局安装):

```bash
npx @honwee/ssh-mcp-server
```

## 配置

### Claude Desktop

编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": ["-y", "@honwee/ssh-mcp-server"]
    }
  }
}
```

### Cursor

在 Cursor Settings → MCP 中添加:

```json
{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": ["-y", "@honwee/ssh-mcp-server"]
    }
  }
}
```

### Gemini CLI / Antigravity

在 `settings.json` 中添加:

```json
{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": ["-y", "@honwee/ssh-mcp-server"]
    }
  }
}
```

## 使用示例

### 直连服务器

```
1. ssh_connect(host="192.168.1.100", username="root", password="xxx", alias="web-server")
2. ssh_exec(connectionId="web-server", command="uptime")
3. ssh_exec(connectionId="web-server", command="df -h")
4. sftp_list(connectionId="web-server", remotePath="/var/log")
5. sftp_read(connectionId="web-server", remotePath="/etc/nginx/nginx.conf")
6. ssh_disconnect(connectionId="web-server")
```

### 通过跳板机连接

```
ssh_connect(
  host="10.0.0.50",
  username="deploy",
  privateKey="-----BEGIN OPENSSH PRIVATE KEY-----\n...",
  alias="internal-db",
  jumpHost={
    host="bastion.example.com",
    username="admin",
    password="xxx"
  }
)
```

### 执行多行脚本

```
ssh_exec_script(
  connectionId="web-server",
  script="#!/bin/bash\necho '--- Disk Usage ---'\ndf -h\necho '--- Memory ---'\nfree -h\necho '--- Top Processes ---'\nps aux --sort=-%mem | head -10"
)
```

## License

MIT

TDQS

A3.7/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: connection lifecycle, command execution, SFTP file operations, host configuration, logs, and diagnostics. Even similar tools like ssh_exec and ssh_exec_script are unambiguously separated by single command vs. multi-line script, and sftp_read vs. sftp_download by read-only vs. transfer semantics.

Naming Consistency4/5

Names follow a consistent snake_case pattern with recurring prefixes (ssh_, sftp_) and verb-noun combinations such as ssh_connect, ssh_exec, sftp_upload, and ssh_host_add. Minor deviations like ssh_history, ssh_status, and ssh_logs use noun-only names instead of verb_noun, but the overall convention remains predictable.

Tool Count4/5

At 17 tools, the server is slightly above the ideal 3-15 range, but the count is justified by the broad domain covering connection management, command execution, SFTP file operations, host configurations, logging, and diagnostics. Each tool has a distinct role, so the set does not feel bloated.

Completeness4/5

The tool surface covers the core SSH lifecycle well: connect/disconnect, command execution, script execution, SFTP file operations, host CRUD, logs, status, history, and diagnostics. Minor gaps exist, such as no SFTP delete/rename or explicit port-forwarding tool, but these are workable and do not severely impact the server's usefulness.

Maintenance

ActivityInactive
ResponsivenessNo issues