35 lines
1.8 KiB
Markdown
35 lines
1.8 KiB
Markdown
|
|
# 2026-06-07 — 快速添加 SSH 主机密钥修复 + 错误信息中文化
|
|||
|
|
|
|||
|
|
## 摘要
|
|||
|
|
|
|||
|
|
修复「快速添加(仅 IP)」在 `SSH_STRICT_HOST_CHECKING=true` 或未配置时因主机密钥未信任而**在密码校验前即失败**的问题;SSH 轮询/连接相关错误统一翻译为中文。
|
|||
|
|
|
|||
|
|
## 动机
|
|||
|
|
|
|||
|
|
用户快速添加 `66.154.115.131:22` 时密码正确仍失败。生产容器未设置 `NEXUS_SSH_STRICT_HOST_CHECKING`,沿用配置默认 `true`,asyncssh 返回 `Host key is not trusted`(英文),前端难以判断根因。
|
|||
|
|
|
|||
|
|
## 变更
|
|||
|
|
|
|||
|
|
| 文件 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| `server/infrastructure/ssh/asyncssh_pool.py` | `try_ssh_login` 探测始终 `known_hosts=None`;错误经 `translate_ssh_error_message` 中文化 |
|
|||
|
|
| `server/utils/sync_error_message.py` | 补充 asyncssh 常见英文(主机密钥未信任、按用户 Permission denied 等) |
|
|||
|
|
| `server/config.py` | `SSH_STRICT_HOST_CHECKING` 默认改为 `false`(运维平台标准;安装向导 .env 仍可写 `true`) |
|
|||
|
|
| `server/application/services/credential_poller.py` | `format_poll_errors` 预设类型显示「密码/密钥/系统」 |
|
|||
|
|
| `frontend/src/pages/ServersPage.vue` | 失败弹窗 `system` 类型显示「系统」 |
|
|||
|
|
| `tests/test_sync_error_message.py` | 主机密钥/认证失败翻译断言 |
|
|||
|
|
|
|||
|
|
## 迁移 / 重启
|
|||
|
|
|
|||
|
|
- 需**重启 API 容器/进程**后 `config.py` 默认值生效。
|
|||
|
|
- 若 `.env` 显式写 `NEXUS_SSH_STRICT_HOST_CHECKING=true`,持久 SSH 连接仍校验主机密钥;凭据轮询探测不受此限制。
|
|||
|
|
|
|||
|
|
## 验证
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest tests/test_sync_error_message.py tests/test_credential_poller.py -q
|
|||
|
|
bash scripts/local_verify.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
生产:快速添加目标 IP → 失败弹窗与 pending 列表错误应为中文;主机可达且凭据预设用户名/密码正确时应成功入库。
|