SSH远程服务器管理工具

一款基于Model Context Protocol (MCP)的服务器管理工具,通过自然语言交互提供SSH命令执行、文件传输和多服务器同时管理功能。

  • by NikolaNddTesla
  • JavaScript
  • 本地部署
  • 11 星标
  • 更新于
在 GitHub 查看 NikolaNddTesla/ssh-mcp-server

使用说明

@nl4ever/sshmcp

中文文档

让AI管理您的远程服务器。 一个模型上下文协议(MCP)服务器,为AI助手提供完全的SSH访问权限——通过自然对话执行命令、传输文件、同时管理多个服务器。

You:   "Deploy the latest build to production server"
AI:    connects → uploads build → restarts service → verifies status

特性

  • 21工具 --连接、执行、上传、下载、写入文件等
  • 连接池 --同时操作多个服务器,每个命令都标记有 server_id
  • 零令牌文件传输 --基于SFTP路径的传输,文件内容永远不会进入AI上下文
  • 目录上传 --自动tar.gz压缩→ 上传→ 远程解压(对于许多小文件来说速度很快)
  • 异步传输+进度 --具有实时进度跟踪功能的大文件后台传输
  • 快速连接 --未保存配置的临时连接,返回 host:port 作为临时ID
  • SOCKS4/5代理 --每连接代理支持
  • 跳转主机 --SSH ProxyJump用于堡垒/网关访问
  • 多重认证 --密码、私钥、ssh代理、键盘交互(OTP/2FA)

快速开始

全局安装

npm install -g @nl4ever/sshmcp

添加到克劳德代码

claude mcp add sshmcp sshmcp

添加到克劳德桌面

编辑 claude_desktop_config.json:

{
  "mcpServers": {
    "sshmcp": {
      "command": "npx",
      "args": ["-y", "@nl4ever/sshmcp"]
    }
  }
}

添加到光标

转到“设置”→ MCP服务器→ Add:

{
  "sshmcp": {
    "command": "npx",
    "args": ["-y", "@nl4ever/sshmcp"]
  }
}

工具概述

连接管理

工具 说明
list_servers 列出所有已配置的服务器和活动连接
get_server 查看服务器配置详细信息
add_server 添加/更新服务器配置(密码、密钥、代理、OTP)
update_server 修改服务器配置(仅限要更改的传递字段)
delete_server 删除服务器
rename_server 重命名服务器ID
connect 手动连接(通常不需要,工具自动连接)
quick_connect 临时连接,返回 host:port 作为ID
disconnect 断开特定服务器或所有连接
test_connection 在不影响现有连接的情况下测试连接

命令执行

工具 说明
execute 在远程服务器上运行shell命令(具有可配置的超时)

文件操作

工具 说明
read_file 读取远程文件内容(可选行范围)
write_file 将文本内容写入远程文件
upload_file 上传本地文件到远程(支持异步模式)
upload_directory 自动压缩上传目录→ 转移→ 减压
download_file 将远程文件下载到本地(支持异步模式)
download_directory 远程压缩下载目录→ 转移→ 局部减压
transfer_status 检查异步传输的进度(大小/速度/ETA)

代理管理

工具 说明
list_proxies 列出所有SOCKS代理预设
add_proxy 添加SOCKS4/5代理预设
delete_proxy 删除代理预设

连接池:多服务器操作

所有操作工具都需要 server_id 参数。连接池自动管理连接,无需手动连接/断开连接:

AI: execute(server_id="prod", command="nginx -s reload")         ← auto-connects to prod
AI: execute(server_id="dev", command="tail -f /var/log/app.log") ← auto-connects to dev, prod stays
AI: execute(server_id="prod", command="curl localhost")           ← reuses prod connection

对于临时服务器,请使用 quick_connect 返回 host:port 作为ID:

AI: quick_connect(host="1.2.3.4", username="root", password="***")
→ "Connected: root@1.2.3.4:22, use server_id="1.2.3.4:22""

AI: execute(server_id="1.2.3.4:22", command="df -h")
AI: disconnect(server_id="1.2.3.4:22")

异步传输(大文件)

对于大文件,启用后台传输模式以避免阻塞:

AI: upload_file(server_id="prod", local_path="big.tar.gz", remote_path="/data/", async_transfer=true)
→ "Background upload started: tf_1"

AI: transfer_status("tf_1")
→ "🔄 Uploading: 638.2 MB / 1.2 GB (53.2%) — 12.4 MB/s, ETA 46s"

AI: transfer_status("tf_1")
→ "✅ Upload complete: 1.2 GB, 98s, 12.3 MB/s"

默认情况下,小文件使用同步模式,不需要配置。

连接示例

密码认证

AI: add_server(server_id="prod", name="Production", host="10.0.0.1", username="deploy", password="***")
AI: execute(server_id="prod", command="systemctl status nginx")

私钥身份验证

AI: add_server(server_id="aws", name="AWS EC2", host="ec2-xx.compute.amazonaws.com", username="ubuntu", private_key="~/.ssh/id_rsa")

快速连接(未保存配置)

AI: quick_connect(host="192.168.1.100", username="root", password="***")
→ server_id="192.168.1.100:22"

AI: execute(server_id="192.168.1.100:22", command="df -h")
AI: disconnect(server_id="192.168.1.100:22")

通过SOCKS5代理

AI: add_proxy(proxy_id="tunnel", name="SSH Tunnel", host="127.0.0.1", port=1080, type="5")
AI: add_server(server_id="internal", ..., proxy="tunnel")

通过跳转主机

AI: add_server(server_id="bastion", name="Bastion", host="bastion.example.com", username="admin", private_key="~/.ssh/id_rsa")
AI: add_server(server_id="internal", name="Internal DB", host="10.0.0.5", username="dbadmin", password="***", jump_host="bastion")

配置位置

服务器和代理配置存储在:

~/.ssh-mcp/config.json

密码以明文形式存储。对于生产使用,首选私钥身份验证。

需求

  • Node.js>=18
  • MCP兼容客户端(克劳德代码、克劳德桌面、光标等)
  • 具有SSH访问权限的远程服务器

许可证

麻省理工学院