# WebSSH - 在线SSH终端工具 一个基于Web的SSH终端工具,模仿Xshell的功能,提供完整的Web版SSH客户端体验。 ## ✨ 功能特性 ### ✅ 已实现功能 #### 用户认证系统 (P0) - 用户注册(邮箱+密码) - 用户登录(JWT令牌认证) - 密码加密存储(bcrypt) - 路由守卫和权限控制 #### 服务器资产管理 (P0) - 服务器增删改查 - 支持密码和私钥认证 - AES-256加密存储敏感信息 - 服务器分组管理 - 树形结构展示 #### SSH终端核心功能 (P0) - 基于xterm.js的Web终端 - WebSocket实时通信 - SSH2库后端连接 - 终端窗口自适应 - 命令输入和输出 - 快捷键支持(Ctrl+C等) #### 前端界面 (P0) - Vue3 + Element Plus现代化界面 - 响应式设计 - 服务器管理面板 - 终端界面 - 快速连接功能 ### 🔄 待实现功能 - [ ] SFTP文件传输功能 (P1) - [ ] 多标签页支持 (P1) - [ ] 分屏显示 (P1) - [ ] 终端外观定制 (P2) - [ ] 快捷命令功能 (P2) - [ ] 连接保持和自动重连 (P1) - [ ] 操作日志记录 (P2) ## 🏗️ 技术架构 ### 前端技术栈 - **框架**: Vue 3 + Vite - **UI组件库**: Element Plus - **终端组件**: xterm.js + xterm-addon-fit - **状态管理**: Pinia - **路由**: Vue Router - **HTTP客户端**: Axios - **WebSocket**: socket.io-client ### 后端技术栈 - **运行时**: Node.js - **Web框架**: Express.js - **SSH连接**: ssh2库 - **实时通信**: Socket.IO - **数据库**: MySQL - **认证**: JWT + bcryptjs - **加密**: AES-256-GCM ### 数据库设计 ```sql -- 用户表 users (id, email, phone, password_hash, created_at, updated_at) -- 服务器表 servers (id, user_id, name, host, port, username, password_encrypted, private_key_encrypted, auth_type, group_name, created_at, updated_at) -- 连接日志表 connection_logs (id, user_id, server_id, host, start_time, end_time, duration) ``` ## 📁 项目结构 ``` webssh/ ├── backend/ # Node.js后端服务 │ ├── config/ │ │ └── database.js # 数据库配置和初始化 │ ├── routes/ # API路由 │ │ ├── auth.js # 认证相关路由 │ │ └── servers.js # 服务器管理路由 │ ├── socket/ # WebSocket处理 │ │ └── socketHandler.js # SSH连接处理 │ ├── utils/ │ │ └── encryption.js # 加密工具类 │ ├── .env # 环境变量配置 │ ├── package.json # 后端依赖配置 │ └── server.js # 主服务器入口 ├── frontend/ # Vue3前端应用 │ ├── src/ │ │ ├── components/ # 可复用组件 │ │ │ └── ServerForm.vue # 服务器表单组件 │ │ ├── router/ # 路由配置 │ │ │ └── index.js # 路由定义和守卫 │ │ ├── stores/ # 状态管理 │ │ │ ├── auth.js # 用户认证状态 │ │ │ ├── servers.js # 服务器管理状态 │ │ │ └── terminal.js # 终端连接状态 │ │ ├── views/ # 页面组件 │ │ │ ├── Dashboard.vue # 主仪表板 │ │ │ ├── Login.vue # 登录页面 │ │ │ ├── Register.vue # 注册页面 │ │ │ └── Terminal.vue # 终端页面 │ │ ├── App.vue # 根组件 │ │ └── main.js # 应用入口 │ ├── index.html # HTML模板 │ ├── package.json # 前端依赖配置 │ └── vite.config.js # Vite构建配置 ├── package.json # 根项目配置 └── README.md # 项目说明文档 ``` ## 🚀 快速开始 ### 环境要求 - Node.js 16+ - MySQL 5.7+ ### 1. 克隆项目 ```bash git clone <项目地址> cd webssh ``` ### 2. 数据库设置 ```sql -- 创建数据库 CREATE DATABASE webssh CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户(可选) CREATE USER 'webssh'@'localhost' IDENTIFIED BY 'webssh'; GRANT ALL PRIVILEGES ON webssh.* TO 'webssh'@'localhost'; FLUSH PRIVILEGES; ``` ### 3. 安装依赖 ```bash # 安装后端依赖 cd backend npm install # 安装前端依赖 cd ../frontend npm install # 返回根目录安装开发依赖 cd .. npm install ``` ### 4. 环境配置 ```bash # 复制环境配置文件 cp backend/.env.example backend/.env ``` 编辑 `backend/.env` 文件: ```env # Database Configuration DB_HOST=localhost DB_PORT=3306 DB_USER=webssh DB_PASSWORD=webssh DB_NAME=webssh # JWT Secret (生成随机密钥) JWT_SECRET=your_jwt_secret_key_here # Server Configuration PORT=3000 NODE_ENV=development # Encryption Key (必须32字节长) ENCRYPTION_KEY=abcdefghijklmnopqrstuvwxyz123456 ``` **重要提示**: - `ENCRYPTION_KEY` 必须是正好32字节的字符串 - 生产环境请使用强密码生成器创建安全的密钥 - 不要将真实的密钥提交到版本控制系统 ### 5. 启动应用 #### 开发模式(推荐) ```bash # 同时启动前后端(需要concurrently) npm run dev ``` #### 分别启动 ```bash # 启动后端服务(端口3000) npm run dev:backend # 启动前端服务(端口5173) npm run dev:frontend ``` #### 生产构建 ```bash # 构建前端 npm run build # 启动生产服务器 npm start ``` ### 6. 访问应用 - 前端地址:http://localhost:5173 - 后端API:http://localhost:3000 ## 🔧 使用指南 ### 首次使用 1. 访问 http://localhost:5173/register 注册账号 2. 登录后进入仪表板 3. 添加你的第一个SSH服务器 4. 点击服务器名称开始连接 ### 服务器配置 - **名称**: 服务器显示名称 - **主机**: IP地址或域名 - **端口**: SSH端口(默认22) - **用户名**: SSH登录用户名 - **认证方式**: 密码认证或私钥认证 - **分组**: 服务器分组(可选) ### 终端操作 - **连接**: 点击"连接"按钮建立SSH会话 - **命令输入**: 在底部输入框输入命令 - **快捷键**: - `Ctrl+C`: 中断当前命令 - `Ctrl+D`: 退出会话 - `Ctrl+L`: 清屏 - **断开**: 点击"断开"按钮结束连接 ### 快速连接 - 不保存服务器信息,直接输入连接参数 - 适合临时连接或测试使用 ## 🔒 安全特性 ### 数据加密 - **用户密码**: bcrypt加密存储 - **服务器认证信息**: AES-256-GCM加密 - **传输加密**: WebSocket over HTTPS(生产环境) ### 认证授权 - JWT令牌认证 - 路由权限控制 - 用户数据隔离 ### 输入验证 - 前后端双重验证 - SQL注入防护 - XSS攻击防护 ## 🐛 故障排除 ### 常见问题 #### 1. 数据库连接失败 ```bash # 检查MySQL服务状态 sudo systemctl status mysql # 检查数据库用户权限 mysql -u webssh -p webssh ``` #### 2. 加密密钥错误 ```bash # 确保ENCRYPTION_KEY为32字节 node -e "console.log(process.env.ENCRYPTION_KEY.length)" ``` #### 3. 端口冲突 ```bash # 检查端口占用 netstat -tulpn | grep :3000 netstat -tulpn | grep :5173 ``` #### 4. 依赖安装失败 ```bash # 清除缓存重新安装 npm cache clean --force rm -rf node_modules package-lock.json npm install ``` ### 日志查看 ```bash # 后端日志 cd backend npm run dev # 前端日志 cd frontend npm run dev ``` ## 🤝 贡献指南 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 ## 🙏 致谢 - [xterm.js](https://xtermjs.org/) - 强大的Web终端组件 - [ssh2](https://github.com/mscdex/ssh2) - Node.js SSH客户端库 - [Vue.js](https://vuejs.org/) - 渐进式JavaScript框架 - [Element Plus](https://element-plus.org/) - Vue3组件库 ## 📞 联系我们 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件 --- **注意**: 本项目仍在开发中,部分功能可能不完善。生产环境使用前请充分测试。