MCP外壳服务器
一种模型上下文协议(MCP)服务器,提供本地Windows PowerShell命令和远程SSH Linux命令执行功能,并支持密码和PEM密钥身份验证。
特性
- 本地PowerShell工具:在本地执行Windows PowerShell命令
- SSH远程工具:通过SSH在远程服务器上执行Linux命令
- 双重身份验证:支持密码和PEM密钥身份验证
- 服务器管理:列出并管理多个SSH服务器连接
- 简单配置:基于JSON的服务器配置
- ES模块支持:现代JavaScript实现
- 错误处理:全面的错误处理和输出捕获
安装
- 安装依赖项:
npm install用法
运行服务器
本地PowerShell服务器(index.js)
启动本地PowerShell MCP服务器:
npm startSSH远程服务器(serveraccess.js)
启动SSH远程服务器:
node serveraccess.js两台服务器都将启动并通过stdio监听MCP请求。
测试
本地PowerShell测试
运行测试脚本以查看示例PowerShell命令:
node test.jsSSH服务器测试
运行SSH测试脚本以查看示例Linux命令:
node test_ssh.js工具
本地PowerShell工具:runCommand
本地服务器公开 runCommand 允许您执行Windows PowerShell命令的工具。
参数:
command(string,必填):要执行的PowerShell命令
示例:
dir-列出目录内容Get-Process-获取正在运行的进程echo "Hello World"-打印消息Get-Date-获取当前日期和时间
MCP请求示例:
{
"method": "tools/call",
"params": {
"name": "runCommand",
"arguments": {
"command": "dir"
}
}
}SSH远程工具
SSH服务器公开了两个用于远程服务器管理的工具:
1.执行SSH命令
通过SSH在远程服务器上执行Linux命令,支持密码和PEM密钥身份验证。
参数:
serverName(string,必填):服务器的名称(如servers.json中定义的)command(string,必填):要执行的Linux命令
示例:
ls -la-列出目录内容ps aux-获取正在运行的进程df -h-检查磁盘使用情况whoami-获取当前用户hostname-获取服务器主机名
MCP请求示例:
{
"method": "tools/call",
"params": {
"name": "executeSSHCommand",
"arguments": {
"serverName": "webserver1",
"command": "ls -la"
}
}
}2.列表服务器
列出配置中具有身份验证方法的所有可用服务器。
参数: 无
MCP请求示例:
{
"method": "tools/call",
"params": {
"name": "listServers",
"arguments": {}
}
}配置
ssh服务器配置
在中配置SSH服务器 servers.json:
密码验证
{
"servers": [
{
"name": "webserver1",
"host": "192.168.1.100",
"port": 22,
"username": "ubuntu",
"password": "your_password_here"
}
]
}PEM密钥认证
{
"servers": [
{
"name": "prod-server1",
"host": "192.168.1.102",
"port": 22,
"username": "ubuntu",
"privateKeyPath": "./keys/prod-server1.pem",
"passphrase": "optional_passphrase_if_key_is_encrypted"
}
]
}配置字段:
name:服务器的唯一标识符host:服务器IP地址或主机名port:SSH端口(通常为22)username:SSH用户名password:SSH密码(用于密码验证)privateKeyPath:PEM私钥文件的路径(用于密钥身份验证)passphrase:加密私钥的可选密码
SSH密钥设置
- 创建密钥目录:
mkdir keys- 放置PEM密钥文件 在
keys/目录
- 设置适当的权限 (Linux/macOS):
chmod 600 keys/*.pem- 更新
servers.json具有正确的密钥文件路径
- 将密钥添加到
.gitignore(已配置)
MCP配置
通用MCP客户端配置
要将这些服务器与MCP客户端一起使用,请将它们添加到MCP配置中:
本地PowerShell服务器
{
"mcpServers": {
"mcpshell": {
"command": "node",
"args": ["D:\\AI\\MCPShell\\index.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}SSH远程服务器
{
"mcpServers": {
"mcpshell-ssh": {
"command": "node",
"args": ["D:\\AI\\MCPShell\\serveraccess.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}Claude桌面配置
要将这两台服务器与Claude Desktop一起使用,请执行以下操作:
- 更新您的Claude配置 包括两个服务器:
{
"mcpServers": {
"mcpshell": {
"command": "node",
"args": ["D:\\AI\\MCPShell\\index.js"],
"env": {
"NODE_ENV": "production"
}
},
"mcpshell-ssh": {
"command": "node",
"args": ["D:\\AI\\MCPShell\\serveraccess.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}- 放置配置 在:
%APPDATA%\Claude\claude_desktop_config.json - 重新启动克劳德桌面 更新配置后
- 测试连接:
- 本地:让克劳德运行“dir”或“Get Date” - SSH:让Claude在“webserver1”服务器上运行“ls-la”
安全说明
本地PowerShell服务器
此服务器直接在PowerShell中执行命令。请谨慎使用,仅在受信任的环境中使用。
SSH远程服务器
- PEM密钥认证 (推荐用于生产):
- 将私钥安全地存储在 keys/ 目录 - 设置适当的文件权限(600) - 使用带有密码的加密密钥 - 从不将密钥提交给版本控制
- 密码验证:
- 使用强密码 - 考虑迁移到基于密钥的身份验证
- 一般安全:
- 确保在目标服务器上正确配置SSH - 监控服务器访问日志 - 仅允许必要的用户访问服务器
故障排除
SSH连接问题
- 检查服务器凭据 在……里面
servers.json - 验证SSH是否已启用 在目标服务器上
- 测试连接性 使用标准SSH客户端
- 检查防火墙设置 在目标服务器上
- 验证用户名/密码 是正确的
PEM关键问题
- 检查密钥文件路径 在……里面
servers.json - 验证密钥文件权限 (应该是600)
- 确保密钥文件存在 在指定位置
- 检查密钥格式 (应为PEM格式)
- 验证密码 如果密钥已加密
本地服务器问题
- 确保PowerShell可用 在Windows上
- 检查执行策略 如果命令被阻止
- 验证Node.js安装 和路径
许可证
国际协调委员会
作者
女孩Prasad Sahu
