使用说明
MCP SSH网关-用于ChatGPT的远程MCP服务器
一个生产就绪的远程MCP(模型上下文协议)服务器,使ChatGPT能够通过安全的SSH网关执行命令和管理VPS上的文件。
建筑
┌─────────────┐ HTTPS/SSE ┌──────────────────┐ SSH ┌────────────────────┐
│ ChatGPT │ ◄─────────────────► │ Management VPS │ ◄──────────► │ Experimental VPS │
│ │ │ MCP Server │ │ (Your Server) │
│ (OAuth) │ │ - OAuth/OIDC │ │ - SSH Access │
│ │ │ - Rate Limit │ │ - Root/Sudo │
│ │ │ - Logging │ │ │
└─────────────┘ └──────────────────┘ └────────────────────┘
▲ ▲
│ │
Nginx/HTTPS IP Restricted
TLS 1.3 SSH Key Only
特性
- 远程MCP服务器:ChatGPT兼容的SSE端点
- OAuth/OIDC身份验证:支持刷新令牌
- SSH网关:在实验性VPS上执行命令
- 安全保障措施:危险命令需要确认
- 综合录井:记录所有工具调用
- 速率限制:防止虐待
- 健康检查:
/health和/ready端点
快速开始
先决条件
- 管理VPS(公共IP,域)
- 实验性VPS(可以是私有的,通过SSH访问)
- MCP服务器的域名(例如。,
mcp.yourdomain.com) - OAuth提供者(Auth0、Keycloak、谷歌等)
部署步骤
- 克隆和配置:
git clone <repo-url> /opt/mcp-server
cd /opt/mcp-server
cp config/.env.template .env
# Edit .env with your configuration
- 运行部署脚本:
sudo scripts/deploy.sh
- 配置实验VPS:
# On experimental VPS
sudo MANAGEMENT_VPS_IP=<management-vps-ip> scripts/setup-experimental-vps.sh
# Add MCP server's SSH public key to authorized_keys
cat /opt/mcp-server/secrets/ssh_key.pub # On Management VPS
# Add this to ~/.ssh/authorized_keys on Experimental VPS
- 配置OAuth提供程序:
- 在OAuth提供者中创建应用程序
- 设置重定向URI:
https://mcp.yourdomain.com/auth/callback - 启用
offline_access用于刷新令牌 - 将客户端ID和密码复制到
.env
- 启动并验证:
sudo systemctl start mcp-server
sudo systemctl status mcp-server
curl https://mcp.yourdomain.com/health
配置
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
MCP_BASE_URL |
MCP服务器的公共URL | 是 |
MCP_SSH__HOST |
实验性VPS IP/主机名 | 是 |
MCP_SSH__USER |
SSH用户名 | 是 |
MCP_OAUTH__ISSUER_URL |
OAuth颁发者URL | 是 |
MCP_OAUTH__CLIENT_ID |
OAuth客户端ID | 是 |
MCP_OAUTH__CLIENT_SECRET |
OAuth客户端机密 | 是 |
看 .env.template 对于所有选项。
MCP工具
以下工具暴露于ChatGPT:
| 工具 | 描述 | 危险 |
|---|---|---|
ping_host |
从VPS Ping主机 | 否 |
run_command |
执行shell命令 | 是* |
read_file |
读取文件内容 | 否 |
write_file |
写入文件 | 是 |
upload_file |
上传文件(base64) | 是 |
download_file |
下载文件(base64) | 否 |
list_dir |
列出目录内容 | 否 |
systemd_status |
获取服务状态 | 否 |
systemd_restart |
重新启动服务 | 是 |
journal_tail |
查看日志 | 否 |
docker_ps |
列出容器 | 否 |
docker_logs |
查看容器日志 | 否 |
docker_exec |
在容器中执行 | 是 |
get_public_ip |
获取VPS公共IP | 否 |
get_server_facts |
获取服务器信息 | 否 |
*危险指令要求 confirm=true 参数。
危险命令
这些命令需要明确确认:
reboot,shutdown,halt,poweroffrm -rf,rm -r,rm -Rufw,iptables,firewall-cmduserdel,useradd,passwdsystemctl(重新启动、停止、禁用)docker(rm,rmi,停止,杀死)- 任何与危险模式匹配的命令
ChatGPT集成
ChatGPT新应用程序表单的最终值
NAME:
VPS SSH Gateway
DESCRIPTION:
Remote MCP server for VPS management via SSH. Provides tools for command execution, file management, Docker operations, and system administration with safety safeguards.
MCP_SERVER_URL:
https://mcp.yourdomain.com/sse
AUTHENTICATION:
OAuth
OAUTH_NOTES:
- issuer: https://your-tenant.auth0.com/
- authorization_endpoint: https://your-tenant.auth0.com/authorize
- token_endpoint: https://your-tenant.auth0.com/oauth/token
- scopes: openid, profile, email, offline_access
- offline_access enabled: yes
OAuth配置
- 在ChatGPT中,选择“OAuth”作为身份验证类型
- 输入您的OAuth提供商详细信息
- MCP服务器将验证每个请求上的令牌
API 参考
端点
| 端点 | 方法 | 描述 |
|---|---|---|
/sse |
MCP协议的GET | SSE端点 |
/message |
POST | MCP通过SSE的消息端点 |
/mcp |
POST | 直接MCP协议端点 |
/health |
GET | 健康检查 |
/ready |
GET | 准备状态检查 |
/auth/login |
GET | OAuth登录启动 |
/auth/callback |
GET | OAuth回调 |
/.well-known/openid-configuration |
GET | OIDC发现 |
健康检查响应
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00",
"version": "1.0.0",
"ssh": "connected",
"oauth": "configured"
}
安全
网络安全
- SSH到实验性VPS仅限于管理VPS IP
- TLS 1.3适用于所有连接
- OAuth 2.0身份验证
应用安全
- 速率限制(默认为100要求/分钟)
- 危险指挥保障
- 综合录井
- 存储在存储库外部的秘密
SSH安全
- MCP服务器专用SSH密钥
- 仅基于密钥的身份验证
- 无密码验证
故障排除
检查服务状态
systemctl status mcp-server
journalctl -u mcp-server -f
检查SSH连接
# Test SSH manually
sudo -u mcp ssh -i /opt/mcp-server/secrets/ssh_key root@<experimental-vps>
检查OAuth
curl https://mcp.yourdomain.com/.well-known/openid-configuration
常见问题
-
SSH连接失败
- 验证SSH密钥是否已添加到实验VPS
- 检查防火墙是否允许从管理VPS IP进行SSH
- 验证SSH用户是否具有sudo权限
-
OAuth令牌无效
- 验证中的OAuth配置
.env - 检查客户端ID和密码是否正确
- 确保
offline_access作用域已启用
- 验证中的OAuth配置
-
SSE连接中断
- 检查nginx配置中的代理超时
- 验证TLS证书是否有效
- 检查速率限制不会阻止请求
发展
本地开发
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp config/.env.template .env
# Edit .env for local development
python -m mcp_server.main
运行测试
pytest tests/
许可证
MIT许可证
支持
对于问题和功能请求,请在GitHub上打开问题。