# 2026-06-09 — 修复凭据页「新建 SSH 密钥」列表不显示

## 摘要

凭据管理 SSH 密钥 Tab 列表始终为空；新建后看似「没保存」。

## 根因

- `GET /api/ssh-key-presets/` 返回**纯数组**（与密码预设相同）
- 前端误用 `fetchPagePerPage`，期望 `{ items, total }`，导致 `items` 恒为 `[]`
- 保存未校验名称/私钥；编辑时空私钥可能被提交

## 涉及文件

- `frontend/src/components/credentials/CredentialsManager.vue` — 改用 `http.getList`；表单校验；编辑 PUT 省略空私钥
- `server/api/settings.py` — 列表增加 `private_key_set`

## 迁移 / 重启

- 前端构建 + 热更新；后端小改需重启 API

## 后续（同主题）

- `server/utils/ssh_key_pem.py`：保存前用 asyncssh 校验 PEM（兼容 `-----BEGIN RSA PRIVATE KEY-----` 等）；公钥留空则自动推导
- 表单提示：整文件粘贴 PEM，含首尾行

## 验证

```bash
pytest tests/test_ssh_key_pem.py -q
cd frontend && npm run type-check
```

凭据页 → SSH 密钥 → 粘贴与 `nz-admin.pem` 同格式的 RSA PEM → 保存后列表出现；私钥列「已设置」。

## 追加 — 数据库凭据默认主机

- 新建数据库凭据时主机默认 `127.0.0.1`（子机本机 MySQL 常见场景）
