315 lines
9.3 KiB
Markdown
315 lines
9.3 KiB
Markdown
# VirtualBox Client
|
||||
|
|
|
|||
|
|
**VirtualBox 虚拟机自动化管理工具** — 通过 SSH 和 VirtualBox SDK 实现对 Ubuntu 20.04 虚拟机的全生命周期管理,支持 AI 智能任务执行、文件传输、脚本部署和图形化管理。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✨ 功能特性
|
|||
|
|
|
|||
|
|
- 🖥️ **虚拟机管理** — 启动、关闭、状态检测(VirtualBox SDK)
|
|||
|
|
- 🔌 **纯 SSH 模式** — 不依赖 VirtualBox,直接通过 SSH 管理远程服务器
|
|||
|
|
- 🤖 **AI 智能代理** — 接入大语言模型(OpenAI API),通过自然语言描述自动执行运维任务
|
|||
|
|
- 📁 **文件传输** — 支持上传/下载文件、上传整个文件夹
|
|||
|
|
- 📂 **工作区浏览器** — 树形文件管理器,支持浏览、新建、重命名、复制、删除、下载文件夹(zip 打包)
|
|||
|
|
- ⚡ **脚本执行** — 上传并执行 Shell 脚本,自动区分部署脚本(sudo)和普通脚本
|
|||
|
|
- 🎨 **图形界面** — 基于 PySide6 构建的现代化暗色主题 GUI
|
|||
|
|
- 📋 **日志面板** — 带等级标识的彩色日志输出,支持自动滚动
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📦 系统要求
|
|||
|
|
|
|||
|
|
| 依赖 | 说明 |
|
|||
|
|
| -------------- | ------------------------ |
|
|||
|
|
| Python | >= 3.14 |
|
|||
|
|
| VirtualBox | 含 VirtualBox SDK(可选) |
|
|||
|
|
| 操作系统 | Windows(主控端) |
|
|||
|
|
| 目标虚拟机 | Ubuntu 20.04(受控端) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 1. 安装依赖
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# 同步 Python 依赖
|
|||
|
|
uv sync
|
|||
|
|
|
|||
|
|
# 安装 VirtualBox SDK(仅 VirtualBox 模式需要)
|
|||
|
|
# 确保已安装 VirtualBox,找到 sdk 路径后执行:
|
|||
|
|
cd ./sdk/installer/python/
|
|||
|
|
uv run ./vboxapisetup.py install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **📥 VirtualBox SDK 下载**
|
|||
|
|
>
|
|||
|
|
> 如果项目中尚未包含 SDK,请先下载 VirtualBox SDK 并解压到项目目录:
|
|||
|
|
>
|
|||
|
|
> ```powershell
|
|||
|
|
> # 下载 VirtualBox SDK 7.2.8
|
|||
|
|
> curl -L https://download.virtualbox.org/virtualbox/7.2.8/VirtualBoxSDK-7.2.8-173730.zip -o VirtualBoxSDK.zip
|
|||
|
|
> # 解压到项目根目录
|
|||
|
|
> tar -xf VirtualBoxSDK.zip
|
|||
|
|
> ```
|
|||
|
|
>
|
|||
|
|
> SDK 目录结构应包含 `sdk/installer/python/vboxapisetup.py`。
|
|||
|
|
>
|
|||
|
|
> *注意:SDK 版本需与本地安装的 VirtualBox 版本匹配。*
|
|||
|
|
|
|||
|
|
### 2. 配置环境变量
|
|||
|
|
|
|||
|
|
复制 `.env.example` 为 `.env`(或直接在 GUI 中填写):
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
# 虚拟机配置
|
|||
|
|
VM_NAME=ubuntu20.04
|
|||
|
|
VM_SSH_HOST=127.0.0.1
|
|||
|
|
VM_SSH_PORT=2222
|
|||
|
|
VM_SSH_USER=your_username
|
|||
|
|
VM_SSH_PASS=your_password
|
|||
|
|
|
|||
|
|
# 大模型配置(AI 代理模式需要)
|
|||
|
|
LLM_API_KEY=sk-your-api-key
|
|||
|
|
LLM_BASE_URL=https://api.openai.com
|
|||
|
|
LLM_MODEL=gpt-4o
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 启动方式
|
|||
|
|
|
|||
|
|
#### 🖥️ 图形界面
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
uv run gui
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
 *(screenshot placeholder)*
|
|||
|
|
|
|||
|
|
#### ⌨️ 命令行示例
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
uv run example
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📖 使用指南
|
|||
|
|
|
|||
|
|
### 配置面板
|
|||
|
|
|
|||
|
|
左侧配置面板包含三个区域:
|
|||
|
|
|
|||
|
|
1. **运行模式** — 切换「纯 SSH 模式」或「VirtualBox 模式」
|
|||
|
|
2. **虚拟机配置** — SSH 连接信息(主机、端口、用户名、密码)
|
|||
|
|
3. **大模型配置** — AI 代理的 API Key、Base URL 和模型名称
|
|||
|
|
|
|||
|
|
### 任务执行面板
|
|||
|
|
|
|||
|
|
在「任务执行」Tab 中,输入自然语言描述,AI 代理将自动解析并执行:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
在 /home/user/myproject 下有一个 "myproject" 项目,
|
|||
|
|
请安装 nginx 并确认服务状态
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
系统会自动:
|
|||
|
|
1. 启动虚拟机(VirtualBox 模式)
|
|||
|
|
2. 连接 SSH
|
|||
|
|
3. 调用 LLM 生成执行计划
|
|||
|
|
4. 逐步执行命令并反馈日志
|
|||
|
|
5. 任务完成后询问是否关闭虚拟机
|
|||
|
|
|
|||
|
|
### 文件传输
|
|||
|
|
|
|||
|
|
在「文件传输」Tab 中:
|
|||
|
|
- **上传** — 选择本地文件,指定远程路径,点击上传
|
|||
|
|
- **下载** — 输入远程路径,选择本地保存位置,点击下载
|
|||
|
|
|
|||
|
|
### 脚本执行
|
|||
|
|
|
|||
|
|
在「Script」Tab 中:
|
|||
|
|
1. 点击「Browse」选择本地的 `.sh` 脚本文件
|
|||
|
|
2. 点击「Upload and Execute Script」
|
|||
|
|
3. 脚本会自动上传到 `/tmp/`,执行完成后下载日志并清理临时文件
|
|||
|
|
4. 以 `deploy_` 开头的脚本自动使用 `sudo` 权限执行
|
|||
|
|
|
|||
|
|
### 工作区浏览器
|
|||
|
|
|
|||
|
|
在「工作区」Tab 中,可以像本地文件管理器一样操作远程文件:
|
|||
|
|
- **双击文件夹** — 懒加载展开子目录
|
|||
|
|
- **单击文件** — 显示文件详情
|
|||
|
|
- **右键菜单** — 重命名、复制、删除、下载
|
|||
|
|
- **工具栏** — 上传文件、上传文件夹、新建文件夹、回到根目录
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🛠️ 脚本开发
|
|||
|
|
|
|||
|
|
### 添加新脚本
|
|||
|
|
|
|||
|
|
在 `src/virtualbox_client/scripts/` 下创建 Python 文件:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# src/virtualbox_client/scripts/my_script.py
|
|||
|
|
|
|||
|
|
def run():
|
|||
|
|
print("Hello from my script!")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
在 `pyproject.toml` 中注册:
|
|||
|
|
|
|||
|
|
```toml
|
|||
|
|
[project.scripts]
|
|||
|
|
my-script = "virtualbox_client.scripts.my_script:run"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
重新构建并执行:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
uv sync
|
|||
|
|
uv run my-script
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 命令式脚本执行
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# 直接通过命令行运行脚本模块
|
|||
|
|
uv run -m virtualbox_client.scripts.my_script
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📁 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
virtualbox_client/
|
|||
|
|
├── src/virtualbox_client/
|
|||
|
|
│ ├── __init__.py
|
|||
|
|
│ ├── gui.py # PySide6 图形界面
|
|||
|
|
│ ├── scripts/
|
|||
|
|
│ │ ├── __init__.py
|
|||
|
|
│ │ ├── agent_task.py # AI 代理任务执行
|
|||
|
|
│ │ ├── example.py # 使用示例
|
|||
|
|
│ │ └── run_script.py # 脚本运行器
|
|||
|
|
│ └── utils/
|
|||
|
|
│ ├── __init__.py
|
|||
|
|
│ ├── ssh_manager.py # 纯 SSH 管理器
|
|||
|
|
│ ├── vbox_ssh_manager.py # VirtualBox + SSH 管理器
|
|||
|
|
│ └── vm_agent.py # AI 代理核心
|
|||
|
|
├── resources/
|
|||
|
|
│ ├── chongming_dev.sh
|
|||
|
|
│ ├── deploy_docker.sh
|
|||
|
|
│ ├── deploy_git.sh
|
|||
|
|
│ ├── deploy_nvm.sh
|
|||
|
|
│ └── deploy_uv.sh
|
|||
|
|
├── scripts/
|
|||
|
|
│ ├── add_script_runner.py
|
|||
|
|
│ ├── add_script_tab.py
|
|||
|
|
│ ├── check_syntax.py
|
|||
|
|
│ ├── clean_pycache.py
|
|||
|
|
│ ├── code_content.py
|
|||
|
|
│ ├── fix_paths.py
|
|||
|
|
│ └── fix_upload_folder.py
|
|||
|
|
├── docs/
|
|||
|
|
│ ├── docker使用手册.md
|
|||
|
|
│ ├── git使用手册.md
|
|||
|
|
│ ├── nvm使用文档.md
|
|||
|
|
│ └── uv使用文档.md
|
|||
|
|
├── .env.example # 环境变量模板
|
|||
|
|
├── .gitignore
|
|||
|
|
├── .python-version
|
|||
|
|
├── gui.spec # PyInstaller 打包配置
|
|||
|
|
├── pyproject.toml # 项目配置与依赖
|
|||
|
|
└── README.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧩 技术架构
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
|
|||
|
|
- **VirtualBox SDK** (`vboxapi`) — 通过 Windows COM 接口管理虚拟机生命周期
|
|||
|
|
- **paramiko** — SSH 连接与远程命令执行
|
|||
|
|
- **openai** — 大语言模型 API 调用(AI 代理模式)
|
|||
|
|
- **pywin32** — Windows COM 互操作
|
|||
|
|
|
|||
|
|
### 前端
|
|||
|
|
|
|||
|
|
- **PySide6** — Qt6 的 Python 绑定,提供现代化 GUI
|
|||
|
|
- **QThread** — 后台线程管理,避免 UI 阻塞
|
|||
|
|
- **QTreeWidget** — 带懒加载的远程文件浏览器
|
|||
|
|
|
|||
|
|
### 工作模式
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────┐
|
|||
|
|
│ VirtualBox Client │
|
|||
|
|
├─────────────────┬───────────────────────┤
|
|||
|
|
│ VirtualBox 模式 │ 纯 SSH 模式 │
|
|||
|
|
│ │ │
|
|||
|
|
│ VirtualBox │ SSH │
|
|||
|
|
│ SDK (COM) │ Manager │
|
|||
|
|
│ ↓ │ ↓ │
|
|||
|
|
│ VBoxSSHManager │ SSHManager │
|
|||
|
|
│ ↓ │ ↓ │
|
|||
|
|
│ Ubuntu VM │ 远程服务器 │
|
|||
|
|
└─────────────────┴───────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🐳 部署与打包
|
|||
|
|
|
|||
|
|
### 使用 PyInstaller 打包为可执行文件
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
uv run pyinstaller gui.spec
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
打包后的可执行文件位于 `dist/` 目录。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ 环境搭建详情
|
|||
|
|
|
|||
|
|
| 命令 | 说明 |
|
|||
|
|
| ----------------------------------------- | ----------------------------- |
|
|||
|
|
| `uv sync` | 同步所有 Python 依赖 |
|
|||
|
|
| `uv run ./sdk/installer/python/vboxapisetup.py install` | 安装 VirtualBox SDK |
|
|||
|
|
| `uv run gui` | 启动图形界面 |
|
|||
|
|
| `uv run example` | 运行命令行示例 |
|
|||
|
|
| `uv run agent-task` | 运行 AI 代理任务 |
|
|||
|
|
| `uv run run-script` | 运行脚本 |
|
|||
|
|
| `uv run pyinstaller gui.spec` | 打包为 EXE |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 文档
|
|||
|
|
|
|||
|
|
详细使用文档请参考 `docs/` 目录:
|
|||
|
|
|
|||
|
|
- [Docker 使用手册](docs/docker使用手册.md)
|
|||
|
|
- [Git 使用手册](docs/git使用手册.md)
|
|||
|
|
- [NVM 使用文档](docs/nvm使用文档.md)
|
|||
|
|
- [UV 使用文档](docs/uv使用文档.md)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 常见问题
|
|||
|
|
|
|||
|
|
**Q: 启动报错 `CoInitialize` 相关错误?**
|
|||
|
|
A: 这是 Windows COM 初始化问题,通常出现在 VirtualBox 模式下。确保已正确安装 VirtualBox SDK。
|
|||
|
|
|
|||
|
|
**Q: SSH 连接失败?**
|
|||
|
|
A: 检查目标虚拟机是否已启动、SSH 服务是否运行、端口转发是否配置正确(默认 2222)。
|
|||
|
|
|
|||
|
|
**Q: AI 代理无响应?**
|
|||
|
|
A: 确保 API Key、Base URL 和模型名称配置正确,且网络可以访问 LLM 服务。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📄 许可证
|
|||
|
|
|
|||
|
|
本项目仅供学习和参考使用。
|