使用说明
🚀 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
🔄 迁移步骤
- 卸载旧版本:删除基于Go的安装
- 安装新版本:
npx @idletoaster/ssh-mcp-server@latest - 更新Claude配置:相同的配置有效!
- 测试连接:验证SSH功能
🤝 贡献
开发工作流程
- 分叉存储库
- 创建要素分支:
git checkout -b feature/amazing-feature - 进行更改
- 彻底测试:
npm test - 提交拉取请求
代码的风格
- 使用ES6+现代JavaScript
- 遵循Node.js最佳实践
- 为函数添加JSDoc注释
- 使用现有模式进行验证
📄 许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- @模型上下文协议/sdk -官方MCP SDK
- ssh2 -Node.js SSH客户端
- 克劳德桌面 -主要目标平台
- 模型上下文协议 -标准规范
📞 支持
内置于❤️ 面向使用Node.js和官方MCP SDK的AI开发社区
🆕 v2.1.0中的新功能:令牌高效文件操作
受Desktop Commander启发的4个强大工具进行了增强,以实现最佳令牌使用:
🎯 代币高效工具
- ssh编辑块 -编辑特定文本块(与完全重写相比,令牌减少80-90%)
- ssh读取行 -按行号读取文件部分(大文件可节省大量成本)
- ssh搜索代码 -不读取完整文件的模式搜索
- 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"
}
}