MCP SSH执行器
一种模型上下文协议(MCP)服务器,支持通过SSH连接执行远程命令。此服务器维护持久的SSH隧道,并提供在远程计算机上执行shell命令的工具。
特性
- 持久SSH连接:跨多个命令执行保持打开的SSH连接
- Docker容器化:在最小的Docker容器中运行,便于部署
- 壳牌运营商支持:完全支持管道(
|),逻辑与(&&),逻辑OR(||),和其他shell操作符 - 身份验证方法:支持SSH密钥和密码身份验证
- MCP协议:实施官方MCP stdio协议,实现无缝集成
建筑
服务器由以下部分组成:
- 基于Go的MCP服务器:使用JSON-RPC 2.0在stdio上实现MCP协议
- SSH连接管理器:处理SSH连接生命周期和命令执行
- Docker容器:提供带有SSH密钥挂载的隔离执行环境
安装
先决条件
- 码头工人
- SSH访问目标计算机
- SSH私钥(推荐)或密码
构建并运行
- 克隆存储库:
git clone https://github.com/kvirund/mcp-ssh-executor.git
cd mcp-ssh-executor- 构建Docker镜像:
docker build -t mcp-ssh-executor .- 配置MCP设置:
添加到您的MCP配置中(例如。, cline_mcp_settings.json):
{
"mcpServers": {
"ssh-executor": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "C:\\Users\\username\\.ssh:/root/.ssh", "mcp-ssh-executor"],
"env": {
"SSH_HOST": "your-server-ip",
"SSH_USER": "your-username",
"SSH_PRIVATE_KEY_PATH": "/root/.ssh/id_rsa",
"SSH_PORT": "22"
},
"disabled": false,
"autoApprove": []
}
}
}用法
可用工具
- connect_ssh
- 建立与已配置服务器的SSH连接 - 无需参数 - 返回成功/错误状态
- execute_命令
- 在远程服务器上执行shell命令 - 参数: command (string)-要执行的命令 - 返回命令输出和退出状态
- disconnect_ssh
- 关闭SSH连接 - 无需参数 - 返回确认
示例使用流程
- 连接:呼叫
connect_ssh建立连接 - 执行命令:
- ls -la -列出目录内容 - ps aux | grep nginx -查找nginx进程 - cd /var/log && tail -f syslog -监控系统日志 - mkdir backup && cp *.log backup/ && tar czf backup.tar.gz backup -创建备份
- 断开:呼叫
disconnect_ssh完成后
壳牌运营商
所有标准外壳操作员的工作:
- 管道:
command1 | command2 - 逻辑与:
command1 && command2 - 逻辑或:
command1 || command2 - 重定向:
command > file.txt - 背景:
command &
配置
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
SSH_HOST | 目标服务器主机名/IP | 是 |
SSH_USER | SSH用户名 | 是 |
SSH_PRIVATE_KEY_PATH | SSH私钥路径 | 是(如果不使用密码) |
SSH_PASSWORD | SSH密码 | 是(如果不使用密钥) |
SSH_PORT | SSH端口(默认:22) | 否 |
SSH密钥设置
对于基于密钥的身份验证:
- 如果需要,生成SSH密钥对:
ssh-keygen - 将公钥复制到服务器:
ssh-copy-id user@host - 安装
.sshDocker中的目录:-v /path/to/.ssh:/root/.ssh
发展
地方发展
- 安装Go 1.23+
- 克隆和构建:
git clone https://github.com/kvirund/mcp-ssh-executor.git
cd mcp-ssh-executor
go mod tidy
go build -o ssh-executor .- 本地测试:
export SSH_HOST=your-host
export SSH_USER=your-user
export SSH_PRIVATE_KEY_PATH=/path/to/key
./ssh-executor测试MCP协议
向stdin发送JSON-RPC消息:
# Initialize
echo '{"jsonrpc": "2.0", "id": 1, "method": "initialize"}' | ./ssh-executor
# List tools
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}' | ./ssh-executor安全考虑
- SSH密钥比密码更安全
- 使用SSH端口转发以提高安全性
- 限制目标服务器上的SSH用户权限
- 定期轮换SSH密钥
- 使用
ssh-keygen -t ed25519适用于现代密钥类型
故障排除
连接问题
- 验证SSH凭据和服务器可访问性
- 检查SSH密钥权限(
chmod 600 ~/.ssh/id_rsa) - 确保SSH服务正在目标服务器上运行
Docker问题
- 验证Docker守护进程是否正在运行
- 检查卷安装路径
- 确保SSH目录具有正确的权限
MCP集成
- 确认MCP设置已正确配置
- 检查Docker镜像是否已构建并可用
- 验证是否设置了环境变量
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改和测试
- 提交拉取请求
