a1b0b2c514
- terminal.html: left sidebar (default open), right server panel with server list - servers.py: fix SSH key double-encryption in update_server, auth method switch cleanup - servers.html: auth switch clears opposite credentials (key↔password) - deploy/pre_deploy_check.sh: 3-gate pre-deploy check (changelog/audit/test) - mcp/Nexus_server.py: deploy() runs gate check before git pull+restart - docs/audit/: audit record template + today's audit results - CLAUDE.md: add gate enforcement rules and progress bar discipline Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
2026-05-26 — Terminal 左侧导航+右侧面板 + SSH密钥/连接修复 + 认证切换清理
变更摘要
- Terminal 左侧导航栏 —
sidebarOpen默认改为true,与其他页面一致,可收起展开 - Terminal 右侧服务器面板 — 新增
w-64右侧面板,显示当前服务器信息(名称/IP/状态)+ 所有服务器列表(可点击快速切换终端) - 面板切换按钮 — 工具栏新增 📋 按钮,可切换右侧面板显示/隐藏
- SSH 密钥双重加密修复(HIGH) —
update_server预设解析时预先encrypt_value(),遍历 ALLOWED_FIELDS 时又加密一次,导致 WebSSH 报Invalid private key - Server 8 数据修复 — 双重加密的
ssh_key_private已重新单次加密 - 认证方式切换清理(HIGH) — 从密钥改密码时旧密钥数据未清除(
ssh_key_private、ssh_key_preset_id、ssh_key_configured残留),前端和后端都增加了联动清理逻辑 - SSH 主机密钥验证配置 —
SSH_STRICT_HOST_CHECKING改为false(运维平台连接大量不可预知服务器,跳过主机密钥验证是业界标准做法) - XSS 加固(审计追加) — CSV 导入错误显示中
e.name/e.domain/e.row加esc();预设<option value>中p.id加esc() - 空 catch 消除 — servers.html 4 处 + servers.py 3 处 + terminal.html 2 处空 catch 全部加日志
- Terminal 错误消息 XSS 加固 —
msg.message和ev.reason加esc()转义
涉及文件
| 文件 | 改动 |
|---|---|
web/app/terminal.html |
左侧导航默认展开、右侧服务器面板、面板切换按钮、esc() 加固、空 catch 加日志 |
server/api/servers.py |
SSH 密钥预设双重加密修复、认证方式切换联动清理(password→清密钥字段、key→清密码字段)、3 处空 except 改 logger.warning() |
web/app/servers.html |
认证方式切换联动清理(密钥↔密码互清对方凭据)、CSV 导入错误 XSS 修复、预设 option value esc() 加固、4 处空 catch 加日志 |
Bug 详情
SSH 密钥双重加密(HIGH)
现象:WebSSH 连接使用 SSH 密钥预设的服务器时,报 Invalid private key。
根因:update_server 预设解析时 encrypt_value(decrypt_value(preset.encrypted_private_key)) 已加密,遍历 ALLOWED_FIELDS 时又 encrypt_value(value) 再加密一次。create_server 无此问题。
修复:
update_server预设解析改为存明文(与create_server一致)- Server 8 数据修复:双重解密 → 重新单次加密
Terminal 错误消息未转义(MEDIUM)
现象:msg.message 和 ev.reason 直接拼接进终端输出,如果包含 ANSI 转义序列可能导致显示异常。
修复:用 esc() 过滤后输出
是否需迁移/重启
- DB 迁移: 无(server 8 数据已直接修复)
- 需重启: 是(servers.py 后端改动已重启)
验证方式
- 打开 terminal.html → 左侧导航栏默认展开 ✅
- 右侧面板显示当前服务器信息 + 服务器列表 ✅
- 点击服务器列表中其他服务器 → 跳转到该服务器终端 ✅
- 收起右侧面板 → 终端区域自动扩展 ✅
- 全屏模式 → 左右面板自动隐藏 ✅
- Server 8 SSH 密钥解密:单次 decrypt_value() 得到 PEM 密钥 ✅