SSH MCP Server
# 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
Scored across 17 tools
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.
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.
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.
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.