Files
webssh/README.md
T
2026-02-10 13:29:45 +08:00

338 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
- 发送邮件
---
**注意**: 本项目仍在开发中,部分功能可能不完善。生产环境使用前请充分测试。