SSH网关服务器

一个用于通过SSH网关安全执行命令和管理文件的远程MCP服务器,支持ChatGPT集成。

  • by STELS37
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 STELS37/mcp_server

使用说明

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、谷歌等)

部署步骤

  1. 克隆和配置:
git clone <repo-url> /opt/mcp-server
cd /opt/mcp-server
cp config/.env.template .env
# Edit .env with your configuration
  1. 运行部署脚本:
sudo scripts/deploy.sh
  1. 配置实验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
  1. 配置OAuth提供程序:
  • 在OAuth提供者中创建应用程序
  • 设置重定向URI: https://mcp.yourdomain.com/auth/callback
  • 启用 offline_access 用于刷新令牌
  • 将客户端ID和密码复制到 .env
  1. 启动并验证:
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, poweroff
  • rm -rf, rm -r, rm -R
  • ufw, iptables, firewall-cmd
  • userdel, useradd, passwd
  • systemctl (重新启动、停止、禁用)
  • 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配置

  1. 在ChatGPT中,选择“OAuth”作为身份验证类型
  2. 输入您的OAuth提供商详细信息
  3. 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

常见问题

  1. SSH连接失败

    • 验证SSH密钥是否已添加到实验VPS
    • 检查防火墙是否允许从管理VPS IP进行SSH
    • 验证SSH用户是否具有sudo权限
  2. OAuth令牌无效

    • 验证中的OAuth配置 .env
    • 检查客户端ID和密码是否正确
    • 确保 offline_access 作用域已启用
  3. 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上打开问题。