Update AGENTS.md with public key auth summary
This commit is contained in:
63
AGENTS.md
63
AGENTS.md
@@ -1302,10 +1302,65 @@ markbase-core/src/
|
|||||||
cargo build -p markbase-core # ✅ 0 error, 0 new warning
|
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`)
|
1. **S3 VFS 後端實作**(S3Vfs 實作 `VfsBackend` trait)
|
||||||
2. **將 DataProvider 整合到 Web 認證**(`src/auth.rs` + `src/server.rs`)
|
2. **SFTP 認證整合 DataProvider**(`sftp/auth.rs` + `sftp/server.rs`)
|
||||||
3. **S3 後端實作**(S3Vfs 實作 `VfsBackend`)
|
3. **Web 前端 Phase 2** — Tab 切換、搜索框 UI
|
||||||
4. **效能測試**(VFS + AES-CTR throughput profiling)
|
4. **安全審計 Phase 9** — 全面 SSH 安全測驗
|
||||||
|
5. **CI Pipeline** — 自動化整合測試
|
||||||
|
6. **效能測試**(VFS + AES-CTR throughput profiling)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user