Files
Nexus/docs/changelog/2026-05-26-terminal-sidebar-panel-ssh-key-fix.md
T
Your Name a1b0b2c514 feat: Terminal sidebar+panel, SSH key fix, auth cleanup, pre-deploy gates
- 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>
2026-05-26 09:16:05 +08:00

3.3 KiB
Raw Blame History

2026-05-26 — Terminal 左侧导航+右侧面板 + SSH密钥/连接修复 + 认证切换清理

变更摘要

  1. Terminal 左侧导航栏sidebarOpen 默认改为 true,与其他页面一致,可收起展开
  2. Terminal 右侧服务器面板 — 新增 w-64 右侧面板,显示当前服务器信息(名称/IP/状态)+ 所有服务器列表(可点击快速切换终端)
  3. 面板切换按钮 — 工具栏新增 📋 按钮,可切换右侧面板显示/隐藏
  4. SSH 密钥双重加密修复(HIGHupdate_server 预设解析时预先 encrypt_value(),遍历 ALLOWED_FIELDS 时又加密一次,导致 WebSSH 报 Invalid private key
  5. Server 8 数据修复 — 双重加密的 ssh_key_private 已重新单次加密
  6. 认证方式切换清理(HIGH — 从密钥改密码时旧密钥数据未清除(ssh_key_privatessh_key_preset_idssh_key_configured 残留),前端和后端都增加了联动清理逻辑
  7. SSH 主机密钥验证配置SSH_STRICT_HOST_CHECKING 改为 false(运维平台连接大量不可预知服务器,跳过主机密钥验证是业界标准做法)
  8. XSS 加固(审计追加) — CSV 导入错误显示中 e.name/e.domain/e.rowesc();预设 <option value>p.idesc()
  9. 空 catch 消除 — servers.html 4 处 + servers.py 3 处 + terminal.html 2 处空 catch 全部加日志
  10. Terminal 错误消息 XSS 加固msg.messageev.reasonesc() 转义

涉及文件

文件 改动
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 无此问题。

修复

  1. update_server 预设解析改为存明文(与 create_server 一致)
  2. Server 8 数据修复:双重解密 → 重新单次加密

Terminal 错误消息未转义(MEDIUM

现象msg.messageev.reason 直接拼接进终端输出,如果包含 ANSI 转义序列可能导致显示异常。

修复:用 esc() 过滤后输出

是否需迁移/重启

  • DB 迁移: 无(server 8 数据已直接修复)
  • 需重启: 是(servers.py 后端改动已重启)

验证方式

  1. 打开 terminal.html → 左侧导航栏默认展开
  2. 右侧面板显示当前服务器信息 + 服务器列表
  3. 点击服务器列表中其他服务器 → 跳转到该服务器终端
  4. 收起右侧面板 → 终端区域自动扩展
  5. 全屏模式 → 左右面板自动隐藏
  6. Server 8 SSH 密钥解密:单次 decrypt_value() 得到 PEM 密钥