SSH MCP服务器

一个安全、高性能的模型上下文协议(MCP)服务器,使AI助手如Claude Desktop能够在远程服务器上执行SSH命令。

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

使用说明

🚀 SSH MCP服务器(Node.js)

安全、高性能 模型上下文协议(MCP)服务器 这使得像Claude Desktop这样的AI助手能够在远程服务器上执行SSH命令。使用Node.js和官方MCP SDK构建,以实现最大的兼容性和可靠性。

🔄 版本2.1.0-令牌高效文件操作:使用官方MCP SDK在Node.js中完全重写-消除了之前所有的Go兼容性问题!


✨ 特性

  • 🔐 安全SSH:支持多密钥格式的私钥身份验证
  • 🤖 AI就绪:Claude Desktop和其他人工智能工具的官方MCP SDK集成
  • ⚡ 高性能:用于快速执行命令的Node.js异步架构
  • 📦 零设置:通过NPX安装一个命令-无需编译
  • 🌐 通用:纯JavaScript在Windows、macOS和Linux上运行
  • 🛡️ 类型安全:使用现代JavaScript和全面的错误处理构建
  • 📋 遵从标准:使用官方@modelcontextprotocol/sdk

🚀 快速开始

安装与使用

# Use directly with NPX (recommended)
npx @idletoaster/ssh-mcp-server@latest

# Or install globally
npm install -g @idletoaster/ssh-mcp-server

Claude桌面配置

添加到您的Claude Desktop MCP配置文件中:

{
  "mcpServers": {
    "ssh": {
      "command": "npx",
      "args": ["-y", "@idletoaster/ssh-mcp-server@latest"],
      "env": {}
    }
  }
}

就是这样! Claude现在可以在您的远程服务器上执行SSH命令。


💬 使用示例

配置后,Claude可以帮助您使用以下命令:

“检查位于192.168.1.100的生产服务器上的磁盘使用情况”

“以用户admin身份重新启动server.example.com上的nginx服务”

“使用我的SSH密钥显示我的Ubuntu服务器上正在运行的进程”

手动工具使用

{
  "tool": "remote-ssh",
  "arguments": {
    "host": "192.168.1.100",
    "user": "ubuntu",
    "command": "df -h",
    "privateKeyPath": "/home/user/.ssh/id_rsa"
  }
}

🔧 配置

SSH密钥认证

服务器支持多种身份验证方法:

1.显式密钥路径

{
  "privateKeyPath": "/path/to/your/private/key"
}

2.环境变量

export SSH_PRIVATE_KEY="/home/user/.ssh/id_rsa"

3.自动发现

自动在以下位置搜索密钥:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_ecdsa

支持的密钥格式

  • ✅ RSA密钥(id_rsa)
  • ✅ ED25519按键(id_ed25519)
  • ✅ ECDSA密钥(id_ecdsa)
  • ✅ OpenSSH格式
  • ✅ PEM格式

🛠️ 发展

先决条件

  • Node.js 18+ (检查: node --version)
  • NPM 9+ (检查: npm --version)

安装Node.js

窗户:

下载自 nodejs.org 或使用巧克力:

choco install nodejs

Linux(Ubuntu/Debian):

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

Linux(CentOS/RHEL):

curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs

macOS:

brew install node

从源代码构建

# Clone repository
git clone https://github.com/idletoaster/ssh-mcp-server.git
cd ssh-mcp-server

# Install dependencies
npm install

# Run locally
npm start

# Development with auto-reload
npm run dev

🏗️ 建筑

ssh-mcp-server/
├── package.json          # NPM configuration & dependencies
├── index.js              # Main MCP server (Official SDK)
├── lib/
│   └── ssh-client.js     # SSH connection management
├── README.md             # Documentation
├── LICENSE               # MIT license
└── .gitignore           # Node.js gitignore

技术栈

  • 运行时:带ES模块的Node.js 18+
  • MCP-SDK:@modelcontextprotocol/sdk(官方)
  • 安全外壳协议:Node.js的ssh2库
  • 分布:NPM直接执行NPX

🔒 安全

最佳实践

  • ✅ 仅限私钥身份验证(无密码)
  • ✅ 可配置的SSH算法和超时
  • ✅ 无持久连接(基于会话)
  • ✅ 输入验证和净化
  • ✅ 全面的错误处理

安全指南

  • 🔐 存储具有限制权限的私钥(chmod 600)
  • 🌐 尽可能使用SSH密钥密码
  • 🛡️ 将SSH密钥限制到中的特定主机 ~/.ssh/config
  • 📝 监控SSH访问日志
  • 🚫 除非绝对必要,否则永远不要以root身份运行

网络安全

# Example SSH config for restricted access
Host production-server
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/production_key
    IdentitiesOnly yes
    StrictHostKeyChecking yes

🧪 测试

局部测试

# Test the MCP server
echo '{"host":"test.server.com","user":"testuser","command":"whoami"}' | npm start

集成测试

# Verify Node.js installation
node --version  # Should be 18+
npm --version   # Should be 9+

# Test NPX execution
npx @idletoaster/ssh-mcp-server@latest --help

🌍 兼容性

操作系统

  • ✅ 视窗 10/11(x64,ARM64)
  • ✅ macOS 12+(英特尔和苹果硅)
  • ✅ Linux (x64,ARM64)-所有主要发行版

人工智能平台

  • 🤖 克劳德桌面 (主要目标)
  • 🤖 光标IDE
  • 🤖 任何与MCP兼容的应用程序

Node.js兼容性

  • ✅ Node.js 18.x (LTS)
  • ✅ Node.js 20.x (LTS)
  • ✅ Node.js 22.x (当前)

📊 从v1.x迁移(Go)

从Go版本升级? Node.js版本提供:

✅ 改进

  • 零编译 -不再有二进制版本
  • 更好的兼容性 -官方MCP SDK
  • 更快的发展 -直接代码更改
  • 更简单的部署 -纯NPX分布
  • 无协议问题 -官方Anthropic SDK

🔄 迁移步骤

  1. 卸载旧版本:删除基于Go的安装
  2. 安装新版本: npx @idletoaster/ssh-mcp-server@latest
  3. 更新Claude配置:相同的配置有效!
  4. 测试连接:验证SSH功能

🤝 贡献

开发工作流程

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/amazing-feature
  3. 进行更改
  4. 彻底测试: npm test
  5. 提交拉取请求

代码的风格

  • 使用ES6+现代JavaScript
  • 遵循Node.js最佳实践
  • 为函数添加JSDoc注释
  • 使用现有模式进行验证

📄 许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。


🙏 致谢


📞 支持


内置于❤️ 面向使用Node.js和官方MCP SDK的AI开发社区

🆕 v2.1.0中的新功能:令牌高效文件操作

受Desktop Commander启发的4个强大工具进行了增强,以实现最佳令牌使用:

🎯 代币高效工具

  1. ssh编辑块 -编辑特定文本块(与完全重写相比,令牌减少80-90%)
  2. ssh读取行 -按行号读取文件部分(大文件可节省大量成本)
  3. ssh搜索代码 -不读取完整文件的模式搜索
  4. ssh写入块 -采用追加/重写模式的高效内容编写

💡 益处

  • 代币数量减少80-90% 用于文件操作
  • 不再重写完整文件 对于小的变化
  • 部分文件读取 适用于大型代码库
  • 模式搜索 无令牌开销

📖 新工具使用

// Edit specific text blocks
{
  "name": "ssh-edit-block",
  "arguments": {
    "host": "server.com",
    "user": "username", 
    "filePath": "/path/to/file.js",
    "oldText": "version: '2.0.0'",
    "newText": "version: '2.1.0'"
  }
}

// Read specific lines only
{
  "name": "ssh-read-lines", 
  "arguments": {
    "host": "server.com",
    "user": "username",
    "filePath": "/path/to/large-file.js",
    "startLine": 100,
    "endLine": 150
  }
}

// Search patterns efficiently
{
  "name": "ssh-search-code",
  "arguments": {
    "host": "server.com", 
    "user": "username",
    "path": "/project",
    "pattern": "function.*export",
    "filePattern": "*.js"
  }
}