# web-ssh **Repository Path**: JabinL/web-ssh ## Basic Information - **Project Name**: web-ssh - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-10 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web SSH 企业级 Web SSH 管理平台,JumpServer 管理模型 + MobaXterm 终端体验。 ## 技术栈 | 层 | 技术 | |---|------| | 前端 | Vue 3 + TypeScript + Vite + xterm.js + Element Plus + Splitpanes | | 后端 | Go 1.25 + Gin + GORM + gorilla/websocket | | 存储 | PostgreSQL + Redis | | 部署 | Docker Compose | ## 快速开始 ```bash cd frontend && npm install && npm run build && cd .. docker compose up -d # 访问 http://localhost,默认 admin / Admin123 ``` ## 功能 - **主机管理** — 主机 CRUD、分组管理(私有/组共享)、SSH 连接测试 - **凭据管理** — 独立凭据(密码/私钥),私有或组共享,AES-256-GCM 加密 - **SSH 终端** — MobaXterm 风格:左侧主机树、多标签、分屏、SFTP 面板、快速连接 - **认证** — JWT + 刷新令牌、TOTP MFA(Google Authenticator)、自助改密 - **RBAC** — 3 角色(Super Admin / Admin / User),功能权限 + 用户分组 - **会话审计** — 文本日志(stdin/stdout + 时间戳),在线会话监控(旁观模式) - **用户管理** — CRUD、密码策略、角色分配、用户分组管理 - **登录历史** — Super Admin 可查看所有用户登录记录 - **主题切换** — 暗色 / 亮色双主题 ## API 基础路径 `/api/v1`,统一响应 `{"code":0,"data":{},"message":"ok"}` ``` POST /auth/login · /refresh · /mfa/verify · /mfa/bind · /logout GET/POST /users GET/PUT/DELETE /users/:id POST /users/change-pwd POST /users/:id/reset-pwd GET/POST /hosts GET/PUT/DELETE /hosts/:id POST /hosts/:id/test GET/POST/DELETE /host-groups GET/POST /credentials GET/PUT/DELETE /credentials/:id GET/POST/DELETE /user-groups POST /user-groups/:id/members POST /sessions GET /sessions/active · /history WS /ws/ssh/:sessionId WS /ws/ssh/:sessionId/watch GET /sessions/:id/log POST /sessions/:id/close GET /sftp/:id/list POST /sftp/:id/upload · /mkdir GET /sftp/:id/download DELETE /sftp/:id/remove GET/POST/PUT/DEL /roles GET /audit/logs · /logins GET /system/stats WS /ws/stats ``` ## 项目结构 ``` web-ssh/ ├── cmd/server/ # Go 入口 ├── internal/ │ ├── auth/ # 登录、JWT、MFA、密码策略 │ ├── user/ # 用户 CRUD │ ├── usergroup/ # 用户分组 │ ├── credential/ # 凭据管理(权限矩阵) │ ├── host/ # 主机管理(原 asset) │ ├── rbac/ # 角色权限 │ ├── sshproxy/ # WebSocket ↔ SSH 代理 + 会话管理 │ ├── sftp/ # SFTP 文件操作 │ ├── session/ # 会话文本日志 │ ├── audit/ # 操作日志、登录历史 │ ├── system/ # 系统统计 │ ├── middleware/ # JWT、RBAC、CORS、日志 │ ├── models/ # GORM 数据模型 │ ├── database/ # 连接、迁移、种子 │ └── config/ # 环境变量配置 ├── frontend/src/ │ ├── api/ # Axios 客户端模块 │ ├── views/ # 页面组件(9 个) │ ├── stores/ # Pinia(auth, terminal) │ ├── router/ # Vue Router │ └── components/ # LoginForm, MFAVerify ├── docker-compose.yml ├── Dockerfile └── nginx.conf ``` ## 配置 | 变量 | 默认 | 说明 | |------|------|------| | `SERVER_PORT` | `8080` | API 端口 | | `DATABASE_URL` | `postgres://...` | PG 连接串 | | `REDIS_ADDR` | `redis:6379` | Redis 地址 | | `JWT_SECRET` | `change-me` | 生产必改 | | `AES_KEY` | `0123...` | 32 字节,生产必改 | | `MAX_SESSIONS_PER_USER` | `10` | 并发限制 | ## 角色权限 | 权限码 | 说明 | Super Admin | Admin | User | |--------|------|:-----------:|:-----:|:----:| | `ssh.connect` | SSH 连接 | ✅ | ✅ | ✅ | | `sftp.upload` | SFTP 上传 | ✅ | ✅ | ✅ | | `sftp.download` | SFTP 下载 | ✅ | ✅ | ✅ | | `sftp.delete` | SFTP 删除 | ✅ | ✅ | ❌ | | `host.view` | 查看主机 | ✅ | ✅ | ✅ | | `host.edit` | 编辑主机 | ✅ | ✅ | ❌ | | `host.delete` | 删除主机 | ✅ | ❌ | ❌ | | `credential.view` | 查看凭据 | ✅ | ✅ | ✅ | | `credential.edit` | 编辑凭据 | ✅ | ✅ | ❌ | | `user.view` | 查看用户 | ✅ | ✅ | ❌ | | `user.edit` | 编辑用户 | ✅ | ✅ | ❌ | | `user.delete` | 删除用户 | ✅ | ❌ | ❌ | | `role.edit` | 编辑角色 | ✅ | ❌ | ❌ | | `system.settings` | 系统设置 | ✅ | ❌ | ❌ | | `session.manage` | 会话管理 | ✅ | ✅ | ❌ | | `session.watch` | 旁观会话 | ✅ | ✅ | ❌ | **菜单可见性:** User 仅见工作台+资产管理,Admin 额外可见审计,Super Admin 全部可见。 **主机可见性:** 主机仅创建者本人可见(Super Admin 可见全部)。 **凭据可见性:** 私人凭据仅 owner 可见密钥,组共享凭据组员可见名称但不可见密钥。 ## 终端快捷键 | 快捷键 | 动作 | |--------|------| | `Alt + ←` | 切换到左边标签 | | `Alt + →` | 切换到右边标签 | | `Ctrl + \` | 分屏(复制当前终端为新窗格) | | `双击主机` | 新建连接 | | `右键标签` | 关闭 / 分屏 / 全部重连 | | `右键主机` | 连接 | | `R` | 断连窗格按 R 重连 | | `🔄 按钮` | 一键重连所有断开终端 | | `▦ 按钮` | 状态栏分屏按钮 | | `⚡ 按钮` | 多终端广播模式(stdin 发送到所有窗格) | ## 测试 ```bash go test ./... -v # 后端(24 个测试,8 个包) cd frontend && npm run build # 前端构建验证 ```