Files
2026-02-10 13:29:45 +08:00

152 lines
3.7 KiB
Plaintext
Raw Permalink 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.
现在想要开发一个web版本的xshell工具,功能模仿xshell,但是要集成注册和登录
一、 用户与权限系统 (User Center)
这是最基础的门槛,确保数据隔离。
P0 - 注册与登录
用户注册(邮箱/手机号 + 密码)。
用户登录(JWT 或 Session 鉴权)。
密码找回/重置。
二、 资产管理 (Asset Management)
模仿 Xshell 左侧的“会话管理器”。
P0 - 服务器(会话)增删改查
添加服务器:主机名 (Name)、IP、端口 (Port)、用户名 (User)。
认证方式选择:密码认证、私钥 (PEM/PPK) 认证。
核心安全需求:所有密码和私钥在数据库中必须加密存储(使用 AES-256,密钥与用户 ID 绑定),绝不能明文存储。
P1 - 分组管理 (Tree View)
支持文件夹层级结构(类似 Xshell 左侧树状图)。
支持拖拽排序、归类。
P1 - 快速连接
不保存会话,直接输入 ssh user@ip 进行一次性连接。
三、 核心终端功能 (Terminal Core)
这是模仿 Xshell 体验的重中之重,前端通常使用 xterm.js,后端使用 SSH2 库。
P0 - SSH 连接与交互
基于 WebSocket 实现全双工通信。
支持标准的 Shell 操作(输入命令、回显、Ctrl+C 中断等)。
支持 Vim/Top 等全屏应用的正确渲染。
P0 - 终端自适应 (Resize)
浏览器窗口大小改变时,自动同步发送 window-change 信号给后端,防止 Vim 错位。
P1 - 复制粘贴
选中文本自动复制(模仿 Xshell 行为)。
右键菜单粘贴,或 Shift+Insert 粘贴。
P1 - 多标签页 (Tabs)
支持同时打开多个 SSH 会话,顶部 Tab 切换。
支持分屏显示(Split View,左右或上下分屏)。
P2 - 外观定制
字号调整、字体设置(如 Fira Code)。
配色方案切换(黑客绿、Solarized、Monokai 等)。
四、 文件传输 (SFTP)
Xshell 通常配合 Xftp 使用,Web 版需要集成轻量级文件管理。
P1 - 侧边栏文件树
在终端侧边展示当前目录的文件列表。
支持双击进入目录、返回上级。
P1 - 上传/下载
上传:支持拖拽本地文件到浏览器窗口,自动上传到当前目录。
下载:右键文件 -> 下载。
P2 - 在线编辑
双击文本文件,弹窗进行代码编辑,保存后自动上传覆盖(通过 SFTP 协议)。
五、 高级辅助功能 (Advanced Features)
这是让你的工具“像 Xshell”的关键。
P1 - 保持连接 (Keep-Alive)
发送心跳包,防止防火墙或 Nginx 切断 WebSocket 连接。
断线自动重连机制。
P2 - 快捷命令 (Snippets)
侧边栏或底部栏预设常用命令(如 tail -f logs, docker ps)。
点击按钮直接发送命令到终端。
P2 - 脚本录制与回放
记录操作日志(Asciinema 格式),用于审计。
推荐技术架构
为了实现上述需求,建议的技术选型如下:
前端 (Frontend)
框架: Vue3。
终端组件:xterm.js (业界标准,VS Code 也在用)。
UI 库:Ant Design 或 Element Plus (用于布局和表单)。
后端 (Backend)
语言: Node.js (生态好,SSH 库丰富)。
SSH 库:
Go: golang.org/x/crypto/ssh
Node.js: ssh2
WebSocket:
Node.js: socket.io 或 ws
Web 框架: NestJS/Express (Node)。
数据库
MySQL:存储用户信息、资产信息。
Redis:存储临时的 WebSocket Session 状态。
============================================
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
方法2:使用在线工具生成
访问 https://www.random.org/strings/
生成32个字符的随机字符串(字母和数字组合)
方法3:手动创建32字节字符串
使用任何32个字符的组合,例如:
k3yF0rW3bSSH2024Pr0j3ctS3cur1ty!
MyS3cur3K3yF0rW3bSSHPr0j3ct2024