liumangmang e2656fb1b5 Fix: 文件选择器进入目录时清空搜索条件
在 SftpFilePickerModal 增加 load() 中 searchQuery.value = '',确保文件选择器打开时或进入目录时重置搜索条件。

改动:
- SftpFilePickerModal.vue 第 60 行:load() 加载前清空 searchQuery
2026-03-20 17:50:39 +08:00
2026-03-18 23:00:15 +08:00

SSH 管理器

基于 Web 的 SSH 连接管理工具,支持终端与 SFTP 文件传输。技术栈Vue 3、Spring BootJDK 8、JSch、xterm.js。

功能

  • 认证本地用户登录JWT
  • 连接管理SSH 连接的增删改查(密码或私钥)
  • Web 终端:通过 WebSocket + xterm.js 实现实时 SSH 终端
  • SFTP:文件浏览,支持上传、下载、删除、创建目录

环境要求

  • JDK 8+
  • Node.js 18+
  • Maven 3.6+

快速开始

后端

cd backend
mvn spring-boot:run

后端运行在 http://localhost:48080

默认登录:admin / admin123

前端

cd frontend
npm install
npm run dev

前端运行在 http://localhost:5173API 与 WebSocket 会代理到后端)

生产构建

# 后端
cd backend && mvn package

# 前端
cd frontend && npm run build

frontend/dist 目录内容复制到后端的静态资源目录,或单独部署前端。

项目结构

ssh-manager/
├── backend/          # Spring BootJDK 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-secretJWT 签名密钥
  • spring.datasource.urlH2 数据库路径(默认:./data/sshmanager

环境变量

  • SSHMANAGER_ENCRYPTION_KEY:覆盖加密密钥
  • SSHMANAGER_JWT_SECRET:覆盖 JWT 密钥

安全说明

  • 连接密码与私钥均以 AES-256-GCM 加密存储
  • 所有 API 接口需 JWT 认证
  • WebSocket 连接在握手时校验 JWT
  • CORS 仅允许前端来源
Description
Mirror of ssh-manager from gitee
Readme 847 KiB
v1.0.1 Latest
2026-03-08 16:04:14 +00:00
Languages
Vue 46.5%
Java 37.8%
TypeScript 14.5%
Dockerfile 0.4%
CSS 0.4%
Other 0.2%