a14fbb3df3
凭据轮询在 SSH_STRICT 默认 true 时因 HostKeyNotVerifiable 在认证前失败; 探测始终 known_hosts=None,默认 strict 改为 false,错误信息统一中文。 Co-authored-by: Cursor <cursoragent@cursor.com>
1.8 KiB
1.8 KiB
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 连接仍校验主机密钥;凭据轮询探测不受此限制。
验证
pytest tests/test_sync_error_message.py tests/test_credential_poller.py -q
bash scripts/local_verify.sh
生产:快速添加目标 IP → 失败弹窗与 pending 列表错误应为中文;主机可达且凭据预设用户名/密码正确时应成功入库。