# SSH 管理器 基于 Web 的 SSH / SFTP 工作区项目,适合源码交付、私有部署和二次开发。技术栈:Vue 3、Spring Boot(JDK 8)、JSch、xterm.js。 ## 功能 - **认证**:本地用户登录(JWT) - **账户安全**:默认管理员登录后会提示修改密码 - **连接管理**:SSH 连接的增删改查(密码或私钥) - **Moba 工作区**:统一入口 `/moba`,支持多工作区实例、多标签和终端/SFTP 分屏 - **Web 终端**:通过 WebSocket + xterm.js 实现实时 SSH 终端 - **SFTP**:文件浏览、搜索、隐藏文件切换、上传/下载、远程传输、删除、创建目录 - **批量能力**:批量命令执行、操作日志、传输历史 - **交付辅助**:首次启动引导、关于与交付信息、诊断摘要、备份恢复 ## 环境要求 - JDK 8+ - Node.js 18+ - Maven 3.6+ ## 快速开始 ### 后端 ```bash cd backend mvn spring-boot:run ``` 后端运行在 http://localhost:48080 默认登录:`admin` / `admin123` ### 前端 ```bash cd frontend npm install npm run dev ``` 前端运行在 http://localhost:5173(API 与 WebSocket 会代理到后端) 默认登录后进入 `/moba` 工作区。历史路径 `/connections`、`/terminal` 会跳转到 `/moba`;带连接 ID 的旧深链接 `/terminal/:id`、`/sftp/:id` 会先打开对应工作区,再进入 `/moba`。 在 `/moba` 中,点击左侧连接会创建新的工作区实例;同一连接可重复打开多个实例。 ## 交付形态 当前仓库支持两种交付方向: - 源码仓库版:适合会自己部署、要二开的买家 - Windows 安装版:适合普通买家,安装后双击快捷方式即可使用 ## 源码交付建议 如果你按源码版本售卖,建议交付时至少包含: - 当前仓库源码 - `README.md` 或独立部署文档 - Docker 启动方式 - 默认账号与修改密码说明 - 环境变量说明 - 备份导入导出示例 - 售后排查时用到的诊断摘要入口说明 源码版当前不依赖授权码,买家拿到后可自行部署、二开和迁移环境。 ## Windows 安装版 Windows 成品版仍然是本地 Web 应用,但可封装为安装包: - 安装程序:`Setup.exe` - 安装目录:`C:\Program Files\SSH Manager\` - 数据目录:`%LOCALAPPDATA%\SSHManager\data` - 日志目录:`%LOCALAPPDATA%\SSHManager\logs` 安装后双击快捷方式会: - 自动检测程序是否已启动 - 首次生成本地密钥 - 后台启动内置 jar - 自动打开浏览器到 `http://127.0.0.1:48080` ## 启动方式 ### Windows 本地验证 - 先准备 Java 8+ - 构建后可直接运行: - `scripts/windows/start-local.bat` - 本地打包验证: - `scripts/release/build-local-package.bat` 脚本会自动: - 创建 `runtime/` 和 `data/` - 首次生成本地密钥 - 启动后端 jar ### Windows 安装版构建 先准备: - Node.js 18+ - Maven 3.6+ - Inno Setup - 一个已解压的 Windows JRE 目录,并设置环境变量 `SSH_MANAGER_WINDOWS_JRE_DIR` - 发布版本号取自 `backend/pom.xml` 的 `` 建议先执行预检: ```bat scripts\release\check-windows-release.bat ``` 执行: ```bat scripts\release\build-windows-installer.bat ``` 脚本会自动: - 构建前端 - 以 `embed-frontend-dist` profile 打包后端 - 组装 `release/windows-app/` - 如检测到 `ISCC.exe`,生成 `release/windows-installer/SSHManager-Setup-*.exe` - 自动带上安装器图标和买家 / 售后说明文档 ### Docker 版 - Windows 一键启动验证: - `scripts/windows/start-docker.bat` - 停止: - `scripts/windows/stop-docker.bat` 更完整的交付说明见: - `docs/delivery-guide.md` ### 生产构建 ```bash # 前端 cd frontend && npm run build # 后端 cd backend && mvn -Pembed-frontend-dist package ``` ## 验证建议 - 前端改动后至少运行: ```bash cd frontend npm run build ``` - Moba 工作区相关回归项见: - `docs/moba-regression-checklist.md` ## 项目结构 ``` ssh-manager/ ├── backend/ # Spring Boot(JDK 8) │ └── src/main/java/com/sshmanager/ │ ├── config/ # 安全、WebSocket、CORS │ ├── controller/ │ ├── service/ │ ├── entity/ │ └── repository/ ├── frontend/ # Vue 3 + Vite + Tailwind │ └── src/ │ ├── views/ │ ├── components/ │ ├── stores/ │ └── api/ └── docs/design-system/ # UI/UX 规范 ``` ## 配置 ### 后端(application.yml) - `sshmanager.encryption-key`:用于加密连接密码的 Base64 32 字节密钥 - `sshmanager.jwt-secret`:JWT 签名密钥 - `spring.datasource.url`:H2 数据库路径(默认:`${DATA_DIR:/app/data}/sshmanager`) ### 环境变量 - `SSHMANAGER_ENCRYPTION_KEY`:覆盖加密密钥 - `SSHMANAGER_JWT_SECRET`:覆盖 JWT 密钥 - `DATA_DIR`:数据目录(默认 `/app/data`,Docker 下应保持卷挂载) ### Docker 持久化说明 - 默认通过 `make up` / `make restart` 运行,数据存放在 `app-data` 命名卷。 - `make down` 仅停止并移除容器,不删除卷数据。 - 不要使用 `docker compose ... down -v`,该命令会删除卷并导致数据丢失。 ## 安全说明 - 连接密码与私钥均以 AES-256-GCM 加密存储 - 所有 API 接口需 JWT 认证 - WebSocket 连接在握手时校验 JWT - CORS 仅允许前端来源