Shell命令服务器

一个提供本地Windows PowerShell命令执行和远程SSH Linux命令执行能力的服务器,支持密码和PEM密钥认证。

  • by girishsahu008
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 girishsahu008/mcpshellserver

使用说明

MCP外壳服务器

一种模型上下文协议(MCP)服务器,提供本地Windows PowerShell命令和远程SSH Linux命令执行功能,并支持密码和PEM密钥身份验证。

特性

  • 本地PowerShell工具:在本地执行Windows PowerShell命令
  • SSH远程工具:通过SSH在远程服务器上执行Linux命令
  • 双重身份验证:支持密码和PEM密钥身份验证
  • 服务器管理:列出并管理多个SSH服务器连接
  • 简单配置:基于JSON的服务器配置
  • ES模块支持:现代JavaScript实现
  • 错误处理:全面的错误处理和输出捕获

安装

  1. 安装依赖项:
npm install

用法

运行服务器

本地PowerShell服务器(index.js)

启动本地PowerShell MCP服务器:

npm start

SSH远程服务器(serveraccess.js)

启动SSH远程服务器:

node serveraccess.js

两台服务器都将启动并通过stdio监听MCP请求。

测试

本地PowerShell测试

运行测试脚本以查看示例PowerShell命令:

node test.js

SSH服务器测试

运行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密钥设置

  1. 创建密钥目录:
mkdir keys
  1. 放置PEM密钥文件 在 keys/ 目录

  2. 设置适当的权限 (Linux/macOS):

chmod 600 keys/*.pem
  1. 更新 servers.json 具有正确的密钥文件路径

  2. 将密钥添加到 .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一起使用,请执行以下操作:

  1. 更新您的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"
      }
    }
  }
}
  1. 放置配置 在: %APPDATA%\Claude\claude_desktop_config.json
  2. 重新启动克劳德桌面 更新配置后
  3. 测试连接:
    • 本地:让克劳德运行“dir”或“Get Date”
    • SSH:让Claude在“webserver1”服务器上运行“ls-la”

安全说明

本地PowerShell服务器

此服务器直接在PowerShell中执行命令。请谨慎使用,仅在受信任的环境中使用。

SSH远程服务器

  • PEM密钥认证 (推荐用于生产):
    • 将私钥安全地存储在 keys/ 目录
    • 设置适当的文件权限(600)
    • 使用带有密码的加密密钥
    • 从不将密钥提交给版本控制
  • 密码验证:
    • 使用强密码
    • 考虑迁移到基于密钥的身份验证
  • 一般安全:
    • 确保在目标服务器上正确配置SSH
    • 监控服务器访问日志
    • 仅允许必要的用户访问服务器

故障排除

SSH连接问题

  1. 检查服务器凭据 在……里面 servers.json
  2. 验证SSH是否已启用 在目标服务器上
  3. 测试连接性 使用标准SSH客户端
  4. 检查防火墙设置 在目标服务器上
  5. 验证用户名/密码 是正确的

PEM关键问题

  1. 检查密钥文件路径 在……里面 servers.json
  2. 验证密钥文件权限 (应该是600)
  3. 确保密钥文件存在 在指定位置
  4. 检查密钥格式 (应为PEM格式)
  5. 验证密码 如果密钥已加密

本地服务器问题

  1. 确保PowerShell可用 在Windows上
  2. 检查执行策略 如果命令被阻止
  3. 验证Node.js安装 和路径

许可证

国际协调委员会

作者

女孩Prasad Sahu