# RDP 原生启动 — 设计说明

## 背景与目标

运维需在 Nexus 服务器列表对 Windows 子机发起远程桌面。用户明确 **不** 复用 WebSSH 的 JWT 短票、WebSocket 隧道与连接级审计。

目标：在服务器上配置 RDP 参数，一键下载 `.rdp` 文件，由操作员本机「远程桌面连接」(mstsc) 直连目标，Nexus 不做协议代理。

## 方案对比

| 方案 | 优点 | 缺点 | 结论 |
|------|------|------|------|
| guacd + Guacamole + WS | 浏览器内 RDP | 需侧车、复杂、等同 WebSSH 栈 | 否 |
| JWT 短票 + Nexus WS 隧道 | 与 SSH 统一 | 用户不需要 | 否 |
| 下载 `.rdp` / 本机 mstsc | 极简、无代理、合规 | 仅 Windows 桌面体验最佳；密码需本机输入 | **采用** |

## 选定方案

1. **存储**：`servers.extra_attrs` 内 `rdp_enabled`、`rdp_port`、`rdp_username`（无 RDP 密码字段；连接密码在本机 mstsc 输入）。
2. **API**：`GET /api/servers/{id}/rdp-file` — 常规管理员 JWT，返回 `application/x-rdp` 文件流；**无**短票、**无** WebSocket、**无** `rdp_connect` 审计。
3. **前端**：服务器表单「远程桌面」折叠项；列表操作「RDP」在 `rdp_enabled` 时显示；点击下载 `.rdp`。
4. **凭据**：`.rdp` 仅含地址与用户名；`prompt for credentials:i:1`，密码在 mstsc 弹窗输入（Windows DPAPI 加密密码无法在 Linux 服务端生成）。

## 安全与性能

- 下载接口与服务器 CRUD 相同鉴权（`get_current_admin`）。
- 不存储、不传输 RDP 密码。
- 不经过 Nexus 网络路径，无额外带宽与 guacd 资源。

## 验收标准

- [ ] 编辑服务器可启用 RDP、设端口/用户名。
- [ ] 启用后列表出现「RDP」，下载 `.rdp` 含正确 `full address` 与 `username`。
- [ ] 未启用或不存在服务器返回 404/400。
- [ ] 无 `POST /auth/rdp-token`、无 `/ws/rdp`、无连接审计表项。

## 非目标

- 浏览器内 RDP、macOS/Linux 客户端集成、RDPWrap、连接录像/会话审计。
