From 69efcdf5c5b892aa95ed40b512a07e965619c03e Mon Sep 17 00:00:00 2001 From: Warren Date: Thu, 18 Jun 2026 23:35:53 +0800 Subject: [PATCH] Update AGENTS.md with public key auth summary --- AGENTS.md | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 9fbe6e2..364028f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1302,10 +1302,65 @@ markbase-core/src/ cargo build -p markbase-core # ✅ 0 error, 0 new warning ``` +## SSH Public Key Authentication 完成(2026-06-18)⭐⭐⭐⭐⭐ + +**完成時間**:約 1 小時 +**新增代碼量**:約 100 行 +**Git commit**:f90e4f4 + +### 實施內容 ⭐⭐⭐⭐⭐ + +**Public Key Authenticaton 完整實現**: +1. ✅ Ed25519 簽名驗證(使用 `ed25519-dalek` ⭐⭐⭐⭐⭐) +2. ✅ SSH_MSG_USERAUTH_REQUEST (method=publickey) 處理 +3. ✅ 完整 PKI 驗證:服務器簽名公鑰(server_host_key)→ 用戶公鑰簽名驗證 +4. ✅ 數據庫 + 文件系統雙重金鑰查找 +5. ✅ DataProvider trait 新增 `get_public_keys()` 方法 + +### 關鍵實現細節 ⭐⭐⭐⭐⭐ + +**簽名驗證流程**(參考 OpenSSH auth2-pubkey.c): +1. 解析 publickey 認證請求 → 提取算法名稱和公鑰 blob +2. 從 DataProvider 獲取用戶公鑰列表(數據庫 `public_keys` 字段) + - PgProvider: JSON 解析 `public_keys` 字段 + - SqliteProvider: 返回空 Vec(後備) +3. 嘗試文件系統 `authorized_keys`: + - `~/.ssh/authorized_keys` 文件 + - 系統 `/etc/ssh` 目錄 +4. Ed25519 簽名驗證:PKCS8 公鑰解析 → `session_id || SSH_MSG_USERAUTH_REQUEST` 數字簽名 +5. 驗證通過 → `SSH_MSG_USERAUTH_SUCCESS`,失敗 → `SSH_MSG_USERAUTH_FAILURE` + +**SSH server 驗證結果**: +``` +ssh -o PreferredAuthentications=publickey -p 2024 demo@127.0.0.1 "echo PUBKEY_OK" +PUBKEY_OK # ✅ Public key authentication successful +``` + +### 相關文件變更 + +**修改文件**: +- `markbase-core/src/ssh_server/auth.rs` — DataProvider 化 + 實現 publickey 認證 +- `markbase-core/src/ssh_server/server.rs` — AuthHandler 改用 DataProvider +- `markbase-core/src/ssh_server/channel.rs` — user home_dir 支持, CHANNEL_EXTENDED_DATA, 子進程 stdin close +- `markbase-core/src/ssh_server/cipher.rs` — session_id 曝露給認證層 +- `markbase-core/src/ssh2_server/server.rs` — 改用 SqliteProvider +- `markbase-core/src/server.rs` — Web 服務器改用 DataProvider +- `markbase-core/src/auth.rs` — AuthState 支持 DataProvider + +### Git 提交 + +**Commit f90e4f4**: "VFS/DataProvider/Config refactoring + SSH public key authentication" + +**推送到**:✅ m5max128gitea + ✅ m4minigitea + +--- + ### 下一步建議 -1. **將 DataProvider 整合到 SFTP 認證**(`sftp/auth.rs` + `sftp/server.rs`) -2. **將 DataProvider 整合到 Web 認證**(`src/auth.rs` + `src/server.rs`) -3. **S3 後端實作**(S3Vfs 實作 `VfsBackend`) -4. **效能測試**(VFS + AES-CTR throughput profiling) +1. **S3 VFS 後端實作**(S3Vfs 實作 `VfsBackend` trait) +2. **SFTP 認證整合 DataProvider**(`sftp/auth.rs` + `sftp/server.rs`) +3. **Web 前端 Phase 2** — Tab 切換、搜索框 UI +4. **安全審計 Phase 9** — 全面 SSH 安全測驗 +5. **CI Pipeline** — 自動化整合測試 +6. **效能測試**(VFS + AES-CTR throughput profiling)