Files
Nexus/docs/audit/2026-06-21-btpanel-ssh-bootstrap.md
T

79 lines
3.1 KiB
Markdown
Raw Normal View History

# 审计 — 2026-06-21 宝塔 SSH 自动获取 API 部署
**Changelog**: `docs/changelog/2026-06-20-btpanel-ssh-api-bootstrap.md`
**Commit**: `82426b19` feat(btpanel): 独立宝塔模块与 SSH 自动获取 API
## Step 3 规则扫描
| 文件 | 规则 | 结论 |
|------|------|------|
| `ssh_bootstrap.py` | 无静默吞错、远程 JSON 校验 | PASS |
| `bootstrap_state.py` | 仅已入库服务器进 loop | PASS |
| `btpanel_service.py` | CUD 审计 `bt_panel_ssh_bootstrap` | PASS |
| `BtPanelSettingsPage.vue` | 批量操作二次确认 | PASS |
| `bootstrap_lock.py` | 同机并发 SSH 互斥 | PASS |
## Closure
| 项 | 状态 | 说明 |
|----|------|------|
| 后台 loop 误扫全库 | FIXED | `is_eligible` 需显式 `bt_panel` 块 |
| `result.success` SSH | FIXED | 改用 `status == success` |
| Permission denied 误判 | FIXED | 区分 SSH 认证与 api.json 写权限 |
| 空凭据标 ready | FIXED | `bootstrap_empty_credentials` |
| get_config 每次 SSH | FIXED | pending/installing 或 refresh 才探测 |
## 文件清单
- `frontend/src/App.vue`
- `frontend/src/api/btpanel.ts`
- `frontend/src/components/btpanel/BtPanelPageShell.vue`
- `frontend/src/components/btpanel/BtPanelServerPicker.vue`
- `frontend/src/composables/btpanel/btPanelContext.ts`
- `frontend/src/composables/btpanel/useBtPanelPageLoad.ts`
- `frontend/src/composables/btpanel/useBtPanelServer.ts`
- `frontend/src/constants/cachedPages.ts`
- `frontend/src/pages/btpanel/BtPanelCrontabPage.vue`
- `frontend/src/pages/btpanel/BtPanelDatabasesPage.vue`
- `frontend/src/pages/btpanel/BtPanelDomainsPage.vue`
- `frontend/src/pages/btpanel/BtPanelLoginPage.vue`
- `frontend/src/pages/btpanel/BtPanelMonitorPage.vue`
- `frontend/src/pages/btpanel/BtPanelServicesPage.vue`
- `frontend/src/pages/btpanel/BtPanelSettingsPage.vue`
- `frontend/src/pages/btpanel/BtPanelSiteCreatePage.vue`
- `frontend/src/pages/btpanel/BtPanelSitesPage.vue`
- `frontend/src/pages/btpanel/BtPanelSslPage.vue`
- `frontend/src/router/index.ts`
- `server/api/btpanel.py`
- `server/api/btpanel_schemas.py`
- `server/api/servers.py`
- `server/application/services/btpanel_bootstrap_schedule.py`
- `server/application/services/btpanel_service.py`
- `server/application/services/server_batch_service.py`
- `server/background/bt_panel_bootstrap_loop.py`
- `server/config.py`
- `server/infrastructure/btpanel/__init__.py`
- `server/infrastructure/btpanel/bootstrap_lock.py`
- `server/infrastructure/btpanel/bootstrap_state.py`
- `server/infrastructure/btpanel/client.py`
- `server/infrastructure/btpanel/credentials.py`
- `server/infrastructure/btpanel/source_ip.py`
- `server/infrastructure/btpanel/ssh_bootstrap.py`
- `server/infrastructure/btpanel/ssh_login.py`
- `server/infrastructure/ssh/remote_shell.py`
- `server/main.py`
- `tests/test_btpanel_bootstrap_loop.py`
- `tests/test_btpanel_client.py`
- `tests/test_btpanel_get_config.py`
- `tests/test_btpanel_ssh_bootstrap.py`
- `tests/test_btpanel_ssh_login.py`
## DoD
- [x] Step 3 规则扫描
- [x] Closure 表
- [x] 文件清单与 `git diff HEAD~1..HEAD` 对齐
- [x] `local_verify` 通过
- [x] `tests/test_btpanel_*.py` 25 passed
- [x] 需重启 API 注册 `bt_panel_bootstrap_loop`