
AiTerm — Local LLM 增强型 Web 终端
AiTerm: https://github.com/31i45/AiTerm
我不会写代码,我忘了这是我用 AI 编程助手开发的第十几个还是二十几个项目,但这绝对是第一个大型项目。我用了 10 天左右就完成了,自己测试体验感觉代码质量相当不错。
AI 将编程入行的门槛提高到了天花板上,但是真正能开发“严肃”、复杂项目的人会越来越吃香!
AiTerm 是一款基于 Web 的 AI 增强型终端应用,将完整的本地伪终端(PTY)与 Ollama 大语言模型深度集成,为运维人员提供智能化的命令行体验。


✨ 核心特性
🖥️ 完整的本地终端
基于 node-pty 的真实伪终端,支持多标签页管理 跨平台 Shell 自动检测:PowerShell / CMD / Bash / Zsh 终端搜索(支持大小写敏感、正则表达式) 自适应字体缩放、右键菜单、选中文本复制粘贴 SSH 等交互式命令完整支持
🤖 AI 智能助手
集成 Ollama 本地大语言模型,完全离线运行 流式响应(Streaming),实时输出 AI 回复 自动感知当前系统环境(OS、Shell、Node.js 版本、工作目录) 自动注入最近执行的命令及输出作为上下文 多语言自适应(中文/英文等,跟随用户输入语言) Markdown 渲染 + 27 种编程语言语法高亮
🔒 安全机制
高危命令拦截( rm -rf /、dd、mkfs、fork 炸弹等 6 类 32 条规则)WebSocket 消息类型白名单验证(仅允许 6 种消息类型) PTY 启动时自动过滤敏感环境变量(AWS 密钥、数据库密码等 10 类) Shell 路径注入防护(禁止路径遍历和特殊字符) HTTP 速率限制、CSP 安全策略、CORS 限制 bcrypt 密码哈希(可选启用) 完整审计日志记录
🎨 界面与体验
Dracula 深色主题,紫色渐变强调色 可拖拽调整终端/AI 面板比例 PWA 支持,可安装为独立桌面应用 完全离线可用,所有前端依赖来自本地 node_modules
📋 环境要求
操作系统支持:Windows / macOS / Linux
🚀 快速开始
安装与启动
# 1. 克隆仓库git clone https://github.com/yourusername/aiterm.gitcd aiterm# 2. 安装依赖npm install# 3. 启动应用npm start启动后访问 http://localhost:3000 即可使用。
如果端口 3000 被占用,应用会自动尝试下一个可用端口。
配置 Ollama(AI 功能)
安装 Ollama:https://ollama.com 拉取模型:
ollama pull llama3.2确认 Ollama 运行中:
ollama serveAiTerm 默认连接 http://127.0.0.1:11434,无需额外配置。
⚙️ 配置说明
编辑项目根目录下的 config.json:
{"server": {"host": "127.0.0.1","port": 3000},"ollama": {"baseUrl": "http://127.0.0.1:11434","defaultModel": "llama3.2"},"security": {"enabled": false,"password": "","sessionTimeout": 3600000},"highRiskCommands": ["rm", "rmdir", "mkfs", "dd", "reboot", "shutdown", "halt", "poweroff","fdisk", "chmod 777", "chown -R", ":(){:|:&};:", "wipefs", "parted"],"safeCommands": ["ls", "cd", "pwd", "cat", "echo", "date", "whoami", "ps", "top","df", "du", "free", "uptime", "hostname", "uname", "clear", "man"],"useWhitelist": false,"maxContextLength": 100,"ws": {"maxReconnectAttempts": 5,"reconnectDelayMs": 1000}}配置项说明
server.host | 127.0.0.1 | ||
server.port | 3000 | ||
ollama.baseUrl | http://127.0.0.1:11434 | ||
ollama.defaultModel | llama3.2 | ||
security.enabled | false | ||
security.password | "" | ||
security.sessionTimeout | 3600000 | ||
useWhitelist | false | ||
maxContextLength | 100 | ||
ws.maxReconnectAttempts | 5 | ||
ws.reconnectDelayMs | 1000 |
环境变量覆盖
配置项也可通过环境变量覆盖:
PORT=8080 HOST=0.0.0.0 npm start⌨️ 快捷键
全局快捷键
Ctrl+Shift+T | |
Ctrl+Tab | |
Ctrl+Shift+Tab | |
Ctrl+1Ctrl+9 | |
Escape |
终端操作
Ctrl+C | |
Ctrl+V | |
Ctrl++ | |
Ctrl+- | |
搜索
Enter | |
Shift+Enter |
AI 对话
Enter | |
Shift+Enter |
🏗️ 项目结构
aiterm/├── index.js # Express 服务器 + WebSocket 网关├── terminal-manager.js # PTY 终端会话管理├── logger.js # Winston 日志系统(应用日志 + 审计日志)├── config.json # 应用配置├── package.json # 依赖声明│├── services/ # 后端服务层│ ├── index.js # 服务容器(依赖注入)│ ├── config.js # 配置管理(文件 + 环境变量)│ ├── security.js # 安全服务(认证、命令过滤、速率限制)│ ├── ollama.js # Ollama AI 对话(流式响应、上下文管理)│ └── log-reader.js # 日志文件读取(支持大文件截断)│├── frontend/ # 前端代码(原生 ES Modules)│ ├── app.js # 主应用逻辑(标签管理、WebSocket、搜索)│ ├── styles.css # 全局样式(Dracula 主题)│ ├── terminal/│ │ └── terminal.js # xterm.js 终端封装(创建、搜索、字体)│ └── ai/│ ├── ai-panel.js # AI 面板(消息渲染、Markdown、流式输出)│ └── ai-panel.css # AI 面板样式│├── public/ # 静态资源│ ├── index.html # 主页面│ ├── manifest.json # PWA 清单│ └── highlight-loader.js # highlight.js 语言加载器│├── logs/ # 应用日志(按日轮转)└── audit_logs/ # 审计日志(按日轮转)🛠️ 技术栈
| 运行时 | ||
| Web 框架 | ||
| 实时通信 | ||
| 伪终端 | ||
| 终端渲染 | ||
| AI 推理 | ||
| Markdown | ||
| 代码高亮 | ||
| XSS 防护 | ||
| 日志 | ||
| 认证 |
🔐 安全架构
命令过滤
AiTerm 内置 6 类高危命令检测规则,基于正则表达式实时匹配:
rm -rf /rm -rf /* | |
mkfswipefs、dd of=/dev/sd* | |
rebootshutdown、halt、poweroff | |
:(){ :|:& };: | |
chmod 777 / | |
mv /cp /dev/null |
支持切换为白名单模式(useWhitelist: true),仅允许执行预定义的安全命令。
环境隔离
PTY 进程启动时自动过滤以下敏感环境变量:
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKENDATABASE_URL/DB_PASSWORDSECRET_KEY/PRIVATE_KEYAPI_KEY/AUTH_TOKEN/PASSWORD/TOKEN
通信安全
WebSocket 消息类型白名单(仅允许 6 种消息类型) Shell 路径注入防护(禁止路径遍历和特殊字符) HTTP 速率限制(防止 API 滥用) Content Security Policy(CSP) CORS 限制(默认仅允许本地访问)
📊 日志系统
logs/ | |||
audit_logs/ |
审计日志记录以下事件类型:
SESSION_CREATE— 会话创建SESSION_CLOSE— 会话关闭AUTH_SUCCESS— 认证成功AUTH_FAILURE— 认证失败COMMAND_EXEC— 命令执行COMMAND_BLOCKED— 命令被拦截RATE_LIMIT— 速率限制触发
📄 许可证
MIT License

夜雨聆风