Skip to content

feat(ssh): 新增自动公钥认证模式#4

Merged
feigeCode merged 2 commits intofeigeCode:devfrom
DurianPancake:feature/ssh-auto-publickey-auth
Mar 26, 2026
Merged

feat(ssh): 新增自动公钥认证模式#4
feigeCode merged 2 commits intofeigeCode:devfrom
DurianPancake:feature/ssh-auto-publickey-auth

Conversation

@DurianPancake
Copy link
Copy Markdown

feat(ssh): 新增自动公钥认证模式

Description:

背景

onetcli 现有三种 SSH 认证方式(密码、私钥文件、SSH Agent),但用户仍需理解"客户端私钥/服务器公钥"的 SSH 细节,与系统 ssh user@host 自动发现本机身份的体验不一致。

变更内容

新增「自动公钥认证」模式,连接时自动按以下顺序尝试本机已有身份:

  1. SSH Agent
  2. ~/.ssh/id_ed25519id_rsaid_ecdsaid_dsa

用户无需手动填写私钥路径,体验与系统 ssh 一致。

功能演示

认证方式配置

  • 配置效果
配置效果

测试连接

  • 测试连接
测试连接

保存连接(测试通过后才允许保存)

  • 设置保存
设置保存

编辑回显

  • 设置回写
设置回写

技术实现

  • SshAuthMethod::AutoPublicKey — 新增存储枚举变体,只保存认证策略,不保存实际私钥路径
  • expand_auto_publickey_auth() — 将 AutoPublicKey 展开为按优先级排列的候选身份列表
  • authenticate_session_with_fallbacks() — 顺序尝试候选身份,全部失败时聚合可读错误
  • authenticate_with_strategy() — 统一认证入口,SSH 终端、SFTP、文件管理面板复用同一逻辑
  • 失败消息三段式:总述 + 原因 + 下一步引导

影响范围

  • SSH 连接表单(ssh_form_window.rs
  • SSH 终端(terminal.rs
  • SFTP 视图(sftp_view/lib.rs
  • 文件管理面板(file_manager_panel.rs
  • SFTP 底层连接(sftp/russh_impl.rs

测试

  • cargo test -p ssh — 6 个单元测试全部通过
  • cargo test -p terminal_view — 9 个单元测试全部通过
  • Agent 可用场景手工验证
  • 仅默认私钥场景手工验证
  • 两者均不可用时失败提示可读
  • 旧认证方式(密码/私钥文件/Agent)不回归

@feigeCode feigeCode merged commit 00d58d2 into feigeCode:dev Mar 26, 2026
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants