# SSHTools
**Repository Path**: chepeiqing/SSHTools
## Basic Information
- **Project Name**: SSHTools
- **Description**: 基于 Electron + React + TypeScript 构建,提供服务器管理、SSH 终端和 SFTP 文件传输的一体化解决方案。
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-27
- **Last Updated**: 2026-03-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

# SSHTools
**开源跨平台桌面 SSH 管理工具**
基于 Electron + React + TypeScript 构建,集会话管理、SSH 终端、SFTP 文件传输于一体。
[](LICENSE)
[](https://www.electronjs.org/)
[](https://react.dev/)
[](https://www.typescriptlang.org/)
[下载安装包](#安装) · [快速开始](#快速开始) · [功能介绍](#功能特性) · [参与贡献](#贡献)
---
## 截图预览
### SSH 终端 + 会话管理
> 左侧树形分组管理服务器,中间 SSH 终端,右侧实时资源监控面板

### SFTP 文件管理
> 终端下方集成 SFTP 面板,支持目录浏览、文件上传下载、权限修改等操作

### 亮色 / 暗色主题
> 支持亮色、暗色、跟随系统三种主题模式,自动适配系统偏好
---
## 功能特性
### SSH 终端
- 基于 **xterm.js** 的完整终端模拟器,支持 256 色和 Unicode
- **多标签页**管理,可同时连接多台服务器并自由切换
- 标签页支持**拖拽排序**,自由调整排列顺序
- 终端内 **搜索**(支持上一个 / 下一个 / 高亮匹配)
- **命令历史记录**面板,从当前会话读取历史,一键重新执行
- **快捷指令**:每个服务器可自定义常用命令,点击输入终端(不自动执行),跟随服务器配置持久化
- 选中自动复制、链接可点击跳转
- 自动换行开关、滚动锁定(查看日志时不自动滚到底部)
- 连接断开自动检测,支持一键重连
- 认证失败时弹窗输入密码重试,可选择记住密码
- 终端字号、字体、主题可按会话独立配置
- **终端导出日志**为 .txt 文件
### SFTP 文件管理
- 集成在终端下方,可从终端当前目录直接打开
- 完整的文件浏览器:目录导航、路径手动输入、前进后退
- 文件和目录的 **上传、下载、删除、重命名、新建**
- 重命名时自动检测同名冲突,支持确认覆盖
- **文件权限修改**(chmod),显示权限字符串和所有者信息
- 批量选择操作,支持拖拽上传(不限本地路径)
- 传输进度实时显示
- 列宽可拖拽调整,SFTP 面板高度可拖拽调整
### 会话管理
- **树形分组**管理,支持多级嵌套子分组
- 支持 **密码** 和 **SSH 密钥** 两种认证方式
- **记住密码**可选,不记住则每次连接时输入
- 服务器配置 **复制**,快速创建相似会话
- **快速连接**列表,按最近连接时间排序
- 标题栏 **全局搜索**,按名称、主机、用户名、备注模糊匹配
- 首页服务器列表搜索和筛选
- 右键菜单:连接、编辑、复制、删除、新建会话、新建分组
### 连接监控
- 右侧详情面板实时显示 **CPU 负载、内存占用、磁盘使用率**(环形进度图,颜色随使用率变化)
- **TOP 进程**:显示 CPU 占用最高的 5 个进程,悬停查看完整命令行
- 显示操作系统、主机名、公网/内网 IP、登录用户、运行时间、进程数
- 连接状态指示灯(绿色已连接 / 黄色连接中 / 灰色已断开)
- 详情面板**宽度可拖拽调整**(240px - 500px)
### 安全设计
- 密码和私钥通过 **Electron safeStorage**(Windows DPAPI / macOS Keychain)加密存储
- localStorage 中 **不保存任何明文密码**,仅存储非敏感配置
- 配置导出使用 **PBKDF2 + AES-256-GCM** 加密所有敏感字段
- SFTP 操作内置路径注入防护(过滤空字节)
- 删除操作强制二次确认
- 应用更新时自动备份服务器配置到 electron-store
### 配置导入导出
- 点击标题栏 **设置齿轮** → **导出配置**,设置加密密码后导出 JSON 文件
- 导入时选择 JSON 文件并输入相同密码即可还原所有服务器和分组配置
- 支持导入未加密的旧版本配置文件
### 界面与交互
- 自定义无边框窗口,macOS 适配原生红绿灯按钮
- **亮色 / 暗色 / 跟随系统**三种主题模式
- 侧边栏可折叠,默认收起不占空间
- 弹窗统一使用主题感知样式,所有输入弹窗支持回车确认
- 首页**功能模块**入口:新建连接、常用命令、快捷指令、使用文档
- **常用命令库**:15 个分类的运维常用 Linux 命令速查,点击复制
- **在线编辑器**:双击 SFTP 文件在新标签页打开,基于 CodeMirror 支持多语言语法高亮、多编码切换、Ctrl+S 保存
- 内置**使用文档**,以独立标签页形式打开
- 中文界面,错误提示自动翻译为中文
---
## 技术栈
| 层级 | 技术 |
|------|------|
| 框架 | Electron 28 |
| 前端 | React 18 + TypeScript 5 |
| UI 组件 | Ant Design 5 |
| 状态管理 | Zustand(持久化 + 运行时) |
| 终端 | xterm.js 5 + 插件(fit / search / web-links) |
| 编辑器 | CodeMirror 6(多语言语法高亮) |
| SSH | ssh2 |
| 加密存储 | electron-store + Electron safeStorage |
| 构建 | Vite 5 + electron-builder |
---
## 安装
### 下载安装包
前往 [Releases](https://github.com/chepeiqing/SSHTools/releases) 页面下载对应平台的安装包:
| 平台 | 格式 |
|------|------|
| Windows | `.exe`(NSIS 安装包)/ 便携版 |
| macOS | `.dmg` / `.zip` |
| Linux | `.AppImage` / `.deb` / `.rpm` |
### 安装说明
> 本项目为开源软件,尚未购买代码签名证书,安装时系统可能弹出安全警告,这是正常现象,请按以下方式处理:
Windows 安装提示
运行安装包后,Windows SmartScreen 可能弹出 **"Windows 已保护你的电脑"** 提示:
1. 点击 **「更多信息」**
2. 点击 **「仍要运行」** 即可继续安装
> 如果使用便携版(.zip),解压后直接运行 `.exe` 即可,无需安装。
macOS 安装提示
打开 `.dmg` 拖入应用后,首次启动可能提示 **"无法打开,因为无法验证开发者"**:
**方法一(推荐):**
1. 打开 **系统设置 → 隐私与安全性**
2. 在底部找到被阻止的应用提示,点击 **「仍要打开」**
**方法二(命令行):**
```bash
sudo xattr -rd com.apple.quarantine /Applications/SSHTools.app
```
Linux 安装提示
Linux 无签名限制。`.AppImage` 需要先添加执行权限:
```bash
chmod +x SSHTools-*.AppImage
./SSHTools-*.AppImage
```
`.deb` / `.rpm` 包使用系统包管理器直接安装即可。
### 从源码构建
```bash
# 克隆仓库
git clone https://github.com/chepeiqing/SSHTools.git
cd SSHTools
# 安装依赖
npm install
# 开发运行(Vite HMR + Electron)
npm run dev
# 构建安装包
npm run build:win # Windows
npm run build:mac # macOS
npm run build:linux # Linux
```
构建产物输出到 `release/` 目录。
---
## 快速开始
1. **新建会话**:点击右上角 `+` 按钮或首页"新建连接",填写主机、端口、用户名和密码
2. **连接服务器**:双击左侧服务器卡片,或右键选择"连接"
3. **管理分组**:右键空白区域创建分组,拖拽服务器到分组中
4. **打开 SFTP**:终端工具栏点击文件夹图标,从当前目录打开文件管理器
5. **搜索服务器**:使用标题栏搜索框快速定位服务器并连接
---
## 项目结构
```
SSHTools/
├── electron/ # Electron 主进程
│ ├── main.ts # 窗口创建、IPC 注册、加密存储
│ ├── preload.ts # contextBridge API 暴露
│ ├── sshManager.ts # SSH/SFTP 连接管理(ssh2)
│ └── types.ts # ElectronAPI 类型定义
├── src/ # React 渲染进程
│ ├── App.tsx # 根布局(TitleBar + SessionManager + MainContent)
│ ├── main.tsx # 入口文件(字体加载、主题配置)
│ ├── components/
│ │ ├── TitleBar/ # 标题栏(搜索、导入导出、关于)
│ │ ├── SessionManager/ # 侧边栏(快速连接 + 服务器树 + 新建会话弹窗)
│ │ ├── MainContent/ # 标签页管理 + 首页
│ │ ├── TerminalPanel/ # SSH 终端(xterm.js)+ 快捷指令 + 命令历史
│ │ ├── SFTPPanel/ # SFTP 文件管理
│ │ ├── EditorPanel/ # 远程文件在线编辑器(CodeMirror)
│ │ ├── CommandsPanel/ # 常用命令库
│ │ ├── DocPanel/ # 内置使用文档
│ │ ├── SettingsModal/ # 全局设置弹窗(主题、字体、终端配色)
│ │ ├── ServerTree/ # 服务器树形列表
│ │ ├── ConnectionDetailPanel/ # 连接详情与资源监控
│ │ └── ErrorBoundary.tsx # 错误边界
│ ├── stores/
│ │ ├── serverStore.ts # 服务器配置(zustand/persist)
│ │ ├── connectionStore.ts # 运行时连接状态
│ │ ├── themeStore.ts # 主题管理
│ │ └── terminalThemeStore.ts # 终端主题、字体、配色预设
│ ├── utils/
│ │ └── crypto.ts # AES-GCM 加解密工具
│ ├── styles/
│ │ └── global.css # 全局样式与 CSS 变量
│ └── types/
│ └── index.ts # 共享类型定义
├── public/ # 静态资源(图标等)
├── build/ # 构建资源(应用图标)
└── package.json
```
---
## 架构概览
```
┌─────────────────────────────────────────────────────────────────────┐
│ Electron 主进程 │
│ │
│ ┌──────────┐ ┌────────────────┐ ┌─────────────┐ ┌───────────┐ │
│ │ 窗口管理 │ │ SSHManager │ │ 加密凭据存储 │ │ 配置备份 │ │
│ │ 多窗口 │ │ SSH 连接池 │ │ (safeStorage │ │(electron │ │
│ │ 标签迁移 │ │ Shell 流 │ │ + DPAPI / │ │ -store) │ │
│ └──────────┘ │ SFTP 会话 │ │ Keychain) │ └───────────┘ │
│ └────────────────┘ └─────────────┘ │
│ │
├──────────────── preload (contextBridge) ─────────────────────────────┤
│ IPC: invoke/handle + send/on │
├─────────────────────────────────────────────────────────────────────┤
│ React 渲染进程 │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Zustand 状态管理(persist + 运行时) │ │
│ │ serverStore │ connectionStore │ themeStore │ terminalTheme │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────────────┐ │
│ │ xterm.js │ │ CodeMirror │ │ Ant Design │ │ @fontsource │ │
│ │ 终端模拟器 │ │ 代码编辑器 │ │ UI 组件 │ │ 内嵌等宽字体 │ │
│ └────────────┘ └────────────┘ └────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 组件层 │ │
│ │ TitleBar → SessionManager → MainContent (多标签页路由) │ │
│ │ ├── TerminalPanel (SSH 终端 + 快捷指令 + 命令历史) │ │
│ │ ├── SFTPPanel (文件管理 + 上传下载) │ │
│ │ ├── EditorPanel (远程文件在线编辑) │ │
│ │ ├── ConnectionDetailPanel (资源监控) │ │
│ │ ├── CommandsPanel / DocPanel │ │
│ │ └── SettingsModal (全局设置:主题 / 字体 / 配色) │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 安全层 │ │
│ │ AES-256-GCM 配置加解密 │ PBKDF2 密钥推导 │ 路径注入防护 │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
- **主进程**:管理窗口生命周期与多窗口标签迁移,通过 `ssh2` 维护 SSH 连接池、Shell 流和 SFTP 会话,使用 `safeStorage`(Windows DPAPI / macOS Keychain)加密存储凭据,`electron-store` 自动备份配置
- **渲染进程**:React SPA,Zustand 管理服务器配置、连接状态、主题和终端配色四个 Store,内嵌 JetBrains Mono 等等宽字体,通过 `window.electronAPI` 与主进程安全通信
- **IPC 通信**:`invoke/handle` 请求响应(连接、SFTP 操作)+ `send/on` 事件推送(SSH 数据流、传输进度、系统主题变化)
- **安全设计**:凭据加密存储 + 配置导出 AES-GCM 加密 + PBKDF2 密钥推导 + SFTP 路径注入防护
---
## 开发
```bash
# 启动开发环境(Vite HMR + Electron 热重载)
npm run dev
# TypeScript 类型检查
npx tsc --noEmit
# ESLint 代码检查
npm run lint
# 生产构建
npm run build
```
### 环境要求
- Node.js >= 18
- npm >= 9
---
## 贡献
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/your-feature`)
3. 提交更改 (`git commit -m 'Add your feature'`)
4. 推送到分支 (`git push origin feature/your-feature`)
5. 创建 Pull Request
---
## 联系
- **开发者**:车培清
- **邮箱**:chepeiqing@sina.com
- **仓库**:[github.com/chepeiqing/SSHTools](https://github.com/chepeiqing/SSHTools)
---
## License
[MIT](LICENSE) © 2024-2026 车培清
---
## 致谢
- [Electron](https://www.electronjs.org/) - 跨平台桌面应用框架
- [React](https://react.dev/) - 用户界面库
- [Ant Design](https://ant.design/) - 企业级 UI 组件库
- [xterm.js](https://xtermjs.org/) - 终端模拟器
- [ssh2](https://github.com/mscdex/ssh2) - SSH 协议实现
- [Zustand](https://github.com/pmndrs/zustand) - 轻量状态管理
- [Vite](https://vitejs.dev/) - 构建工具