# ash-terminal
**Repository Path**: fenlinu/ash-terminal
## Basic Information
- **Project Name**: ash-terminal
- **Description**: ASH打造下一代智能终端解决方案,通过深度融合人工智能与传统SSH协议,为开发者和运维工程师提供高效、智能的命令行体验,降低运维门槛,提升工作效率。
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-04
- **Last Updated**: 2026-02-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AshTerminal
一款现代化的智能 SSH 终端管理工具,集成 AI 助手,让服务器管理更高效、更智能。
[](LICENSE)
[](https://www.electronjs.org/)
[](https://reactjs.org/)
[](https://www.typescriptlang.org/)
## 运行效果
### 主界面

### AI 助手界面

### 历史任务与配置




---
## ✨ 特性
### 核心功能
- 🔌 **多会话管理** - 同时管理多个 SSH 连接,支持密码和私钥认证
- 🖥️ **终端仿真** - 基于 xterm.js,完整支持 ANSI 转义序列和颜色
- 📁 **文件管理** - 内置 SFTP 客户端,支持文件上传、下载和远程编辑
- 📊 **系统监控** - 实时监控远程服务器的 CPU、内存、磁盘和网络状态
- 🚀 **批量执行** - 在SSH会话中批量执行多个命令
### AI 智能助手
- 🤖 **AI Agent 模式** - 支持工具调用(Function Calling),可自动执行命令和操作文件
- 💬 **AI Ask 模式** - 纯问答模式,提供技术咨询和建议
- 🔧 **丰富的工具集** - 命令执行、文件读写、目录浏览、文件搜索等
- ✅ **工具批准机制** - 可配置自动批准规则,确保操作安全
- 📝 **任务历史** - 自动记录 AI 任务和工具调用历史
### 用户体验
- 🎨 **主题切换** - 支持多种 DaisyUI 主题,明暗模式自由切换
- 💾 **配置持久化** - 自动保存会话配置和应用设置
- 🔒 **安全加密** - 敏感配置(API Key)采用 AES-256-CBC 加密存储
- 🌍 **跨平台** - 支持 Windows、macOS 和 Linux
## 🛠️ 技术栈
### 前端
- **框架**: React 19 + TypeScript 5.8
- **状态管理**: Jotai - 原子化状态管理
- **UI 库**: DaisyUI 5 + TailwindCSS 4
- **终端**: xterm.js + react-xterm
### 后端
- **运行时**: Electron 37 + Node.js
- **SSH**: ssh2 + ssh2-sftp-client
- **PTY**: node-pty
- **数据库**: Better-SQLite3
- **配置**: electron-store + dotenv
- **AI**: OpenAI SDK(支持兼容接口)
## 📦 安装
### 环境要求
- Node.js >= 18
- Yarn >= 1.22
### 克隆仓库
```bash
git clone https://github.com/Grealin/ash-terminal.git
cd ash-terminal
```
### 安装依赖
```bash
yarn install
```
### 配置环境变量
创建 `.env` 或 `.env.local` 文件(用于 AI 配置加密):
```bash
# 复制模板文件
cp .env.example .env
```
在 `.env` 中填入实际值:
```env
SECRET_KEY=your-secret-key-here-min-32-characters
```
> **重要说明**:
>
> - `SECRET_KEY` 用于加密存储敏感配置(SSH 会话、AI API Key 等),建议使用至少 32 位的随机字符串
> - **编译时注入机制**:编译时会自动将 `.env` 中的值注入到代码中,编译后的应用无需 `.env` 文件即可运行
> - `.env.local` 优先级高于 `.env`,可用于本地覆盖配置
>
> **安全提示**:
>
> - 使用足够强的密钥(至少 32 位随机字符)
> - 不要在公开渠道分享编译配置
> - 每次重新编译时可以更换新的密钥
## 🚀 快速开始
### 开发模式
```bash
yarn dev
```
启动后支持 DevTools,支持热重载(HMR)。
### 构建生产版本
```bash
# Windows
yarn build:win
# macOS
yarn build:mac
# Linux
yarn build:linux
```
构建产物位于 `dist/` 目录。
### 代码质量检查
```bash
# TypeScript 类型检查
yarn typecheck
# ESLint 检查
yarn lint
# Prettier 格式化
yarn format
```
## 📖 使用指南
### 1. 创建 SSH 会话
1. 点击右侧 **SSH 会话** 的 **+** 按钮
2. 填写连接信息:
- **名称**: 自定义会话名称
- **主机**: SSH 服务器地址
- **端口**: 默认 22
- **用户名**: SSH 用户名
- **密码**: 填写密码
3. 创建成功后点击 **连接** 按钮
### 2. 配置 AI 助手
1. 点击右侧 **设置** 按钮
2. 进入 **AI供应商配置** 标签
3. 添加 Provider:
- **Base URL**: `https://api.openai.com/v1` 或其他兼容接口
- **API Key**: 你的 API Key
- **Model**: 模型名称(如 `gpt-4`)
4. 配置工具批准规则(可选):
- 允许的工具:如 `read_file`, `list_directory`
- 允许的命令前缀:如 `ls`, `cat`, `pwd`
- 禁止的命令前缀:如 `rm -rf`, `dd if=`
### 3. 使用 AI 助手
1. 连接一个SSH会话
2. 切换到 **聊天** 组件
3. 选择模式:
- **Agent 模式**: 可调用各种工具
- **Ask 模式**: 仅回答问题
4. 输入问题或任务,AI 会自动分析并执行
### 4. 文件管理
1. 刷新文件列表
2. 浏览远程文件系统
3. 支持操作:
- 上传文件(点击上传按钮)
- 下载文件(点击文件右侧下载按钮)
- 删除文件(需确认)
### 5. 系统监控
1. 刷新系统监控信息
2. 查看实时监控数据:
- CPU 使用率
- 内存使用情况
- 运行时间
## 🏗️ 项目结构
```
ash-terminal/
├── src/
│ ├── main/ # Main Process
│ │ ├── index.ts # 入口文件
│ │ ├── ipc/ # IPC handlers
│ │ │ ├── session.ts # SSH 会话管理
│ │ │ ├── shell.ts # Shell 操作
│ │ │ ├── file.ts # 文件操作
│ │ │ ├── ai.ts # AI 功能
│ │ │ └── ...
│ │ └── lib/ # 业务逻辑
│ │ ├── SSHPool.ts # SSH 连接池
│ │ ├── SSH2Wrapper.ts # SSH 连接封装
│ │ ├── ConfigManager.ts # 配置管理
│ │ ├── ai/ # AI 相关
│ │ │ ├── AgentManager.ts
│ │ │ ├── TaskManager.ts
│ │ │ ├── tools/ # AI 工具集
│ │ │ └── core/ # Agent 核心
│ │ └── database/ # 数据库
│ ├── preload/ # Preload Script
│ │ ├── index.ts # API 暴露
│ │ └── index.d.ts # 类型定义
│ ├── renderer/ # Renderer Process
│ │ └── src/
│ │ ├── App.tsx # 应用入口
│ │ ├── components/ # React 组件
│ │ ├── store/ # Jotai 状态
│ │ ├── hooks/ # React Hooks
│ │ └── services/ # 服务层
│ └── shared/ # 共享代码
│ ├── models/ # 数据模型
│ ├── types/ # 类型定义
│ └── constants.ts # 常量
├── build/ # 构建资源
└── resources/ # 应用资源
```
## 🔧 开发指南
### 添加新的 IPC 功能
1. 在 `src/shared/types/` 定义类型签名
2. 在 `src/main/lib/` 实现业务逻辑
3. 在 `src/main/ipc/` 注册 IPC handler
4. 在 `src/preload/index.ts` 暴露 API
5. 更新 `src/preload/index.d.ts` 类型声明
详见 [Copilot Instructions](.github/copilot-instructions.md)。
### 添加新的 AI 工具
1. 在 `src/main/lib/ai/tools/` 创建工具类(继承 `BaseTool`)
2. 实现 `getDefinition()` 和 `execute()` 方法
3. 在 `ToolManager` 中注册工具
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
### 提交规范
项目使用 husky + lint-staged 确保代码质量:
- 提交前自动运行 ESLint 和 Prettier
- 提交信息建议完整明确
### 开发流程
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
## 📄 许可证
本项目基于 [MIT License](LICENSE) 开源。
## ⚠️ 免责声明
### 使用风险
- **风险自负**: 使用本软件即表示您同意自行承担所有风险。开发者不对因使用本软件造成的任何直接或间接损失负责。
- **数据安全**: 虽然本软件对敏感配置(SSH 密码、API Key 等)采用 AES-256-CBC 加密存储,但请您务必:
- 定期备份重要数据
- 不要在不可信的环境中运行本软件
### AI 功能声明
- **工具执行**: AI Agent 模式可自动执行命令和操作文件,请务必:
- 仔细配置工具批准规则
- 审查 AI 发起的危险操作(如删除、修改系统文件)
- 不要在生产环境中轻易启用自动批准
- **内容准确性**: AI 生成的内容和建议仅供参考,可能存在错误或不适用的情况,请结合实际情况判断。
- **API 使用**: 使用第三方 AI 服务(如 OpenAI)时,您需遵守其服务条款和使用政策。
### 合规使用
- **授权访问**: 仅对您拥有合法访问权限的服务器使用本软件。
- **法律责任**: 不得将本软件用于任何非法用途,包括但不限于:
- 未经授权访问他人系统
- 破坏或篡改数据
- 其他违反当地法律法规的行为
- **隐私保护**: 尊重他人隐私,不得使用本软件收集、传播未经授权的敏感信息。
### 无担保声明
本软件"按原样"提供,不提供任何明示或暗示的担保,包括但不限于:
- 适销性担保
- 特定用途适用性担保
- 不侵权担保
- 持续可用性和稳定性担保
开发者不保证软件无错误、无中断或满足所有用户需求。
### 第三方服务
本软件集成或依赖的第三方服务(SSH 服务器、AI API 提供商等)由各自的服务提供商负责,开发者不对第三方服务的可用性、安全性或内容负责。
---
**如您使用本软件,则默认同意以上免责条款。**
## 🙏 致谢
- [Electron](https://www.electronjs.org/)
- [React](https://reactjs.org/)
- [xterm.js](https://xtermjs.org/)
- [ssh2](https://github.com/mscdex/ssh2)
- [OpenAI](https://openai.com/)
## 📧 联系方式
如有问题或建议,请通过以下方式联系:
- 提交 [Issue](https://github.com/Grealin/ash-terminal/issues)
- 作者: LinFeng
---
Made with ❤️ by LinFeng