device-center 0.1.0-beta.1 → 0.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/Dockerfile +2 -2
- package/README.md +37 -127
- package/SECURITY.md +7 -15
- package/bin/device-center.mjs +6 -3
- package/docs/agent-install.md +105 -0
- package/docs/architecture.md +25 -57
- package/docs/connection-routing.md +1 -0
- package/docs/device-profiles.md +56 -0
- package/docs/driver-binding.md +6 -1
- package/docs/friend-trial.md +42 -0
- package/docs/hosted-access.md +52 -0
- package/docs/npm.md +19 -35
- package/docs/onboarding.md +8 -5
- package/docs/remote-access.md +76 -0
- package/docs/roadmap.md +17 -28
- package/docs/security-and-sync.md +9 -64
- package/login.html +1 -1
- package/npm-shrinkwrap.json +304 -0
- package/package.json +22 -4
- package/scripts/access.mjs +48 -0
- package/scripts/driver.mjs +4 -3
- package/scripts/release-check.mjs +4 -0
- package/server/cloudAccess.mjs +13 -6
- package/server/connector.mjs +11 -5
- package/server/drivers/access.mjs +84 -0
- package/server/drivers/certificates.mjs +32 -0
- package/server/drivers/cloudLink.mjs +46 -4
- package/server/drivers/cloudRegistry.mjs +107 -20
- package/server/drivers/deviceProfiles.mjs +47 -0
- package/server/drivers/driverProtocol.mjs +3 -2
- package/server/drivers/inventory.mjs +21 -2
- package/server/drivers/relay.mjs +59 -0
- package/server/drivers/remote.mjs +111 -0
- package/server/index.mjs +44 -13
- package/server/mcp.mjs +5 -3
- package/server/unifiedAccess.mjs +33 -17
- package/src/api.js +4 -1
- package/src/device-state.js +19 -0
- package/src/login.css +4 -0
- package/src/login.js +1 -0
- package/src/main.js +197 -42
- package/src/onboarding.js +62 -0
- package/src/start.css +47 -0
- package/src/start.js +23 -0
- package/src/styles.css +22 -0
- package/start.html +45 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 设备名称、用途与手动采集
|
|
2
|
+
|
|
3
|
+
本文描述 `0.2.0-beta.2` 的设备说明与手动采集。云端手动采集需要设备 Driver 更新至本版;旧版仍可正常进行原有周期回报。
|
|
4
|
+
|
|
5
|
+
## 给设备一个容易辨认的名字
|
|
6
|
+
|
|
7
|
+
1. 在设备卡片点 **设备说明**。
|
|
8
|
+
2. 填写名称,例如“家里的 Mac mini”或“Windows 测试机”。留空则恢复设备原始名称。
|
|
9
|
+
3. 选择个人电脑、服务器、工作站、其他,或者保持未分类。
|
|
10
|
+
4. 写明用途,例如“Windows 安装包验收、读取测试日志”。
|
|
11
|
+
5. 按需填写标签和服务与应用,用逗号分隔,点 **保存设备说明**。
|
|
12
|
+
|
|
13
|
+
卡片紧凑展示名称、类型、最多三个标签和一行用途。搜索支持名称、原始名称、类型、用途、标签及服务名。完整信息仍可在设备说明中查看。
|
|
14
|
+
|
|
15
|
+
服务与应用为**用户手动登记**,标注 `servicesSource: user-declared`;当前不扫描已安装应用、服务端口或进程,也不承诺这些服务已安装、正在运行或可访问。不要在说明里填写凭据或私钥。
|
|
16
|
+
|
|
17
|
+
名称最多 80 字符,用途 240 字符;标签最多 8 个、每个 24 字符;服务最多 12 个、每个 40 字符。多人或多个页面同时修改时会拒绝覆盖较新的版本,重新打开核对后再保存。
|
|
18
|
+
|
|
19
|
+
## 什么时候点“采集一次”
|
|
20
|
+
|
|
21
|
+
| 设备 | 行为 | 成功依据 |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| 当前本机 | 重新读取 OS 内存和用户目录所在卷的磁盘 | 本机读取完成,分别更新指标 |
|
|
24
|
+
| 本机关联的 SSH 设备 | 使用当前 SSH 配置,执行既有的固定只读检查 | SSH 认证、主机指纹及资源检查结果 |
|
|
25
|
+
| 云端已绑定的本机 Driver | 向该 Driver 发出一条限时资源采集请求 | Driver 重新观测并签名回报,携带本次请求 ID |
|
|
26
|
+
| 云端分享的 SSH 缓存 | 提示在管理电脑检查 SSH | 云端不会远程触发 SSH |
|
|
27
|
+
| 设备未运行、未回报或旧 Driver | 提示启动或更新 Driver | 不改写旧采集时间,不制造在线状态 |
|
|
28
|
+
|
|
29
|
+
云端请求最多等待 75 秒。设备主动经 HTTPS 查询请求,不开放设备入站端口;仅重采已经批准的资源字段,没有通用命令或任务接口。采集遵守现有回报频率限制,可能需要等待约 15 秒。普通周期回报、无关请求 ID 或超时后的回报不会被当作本次成功。
|
|
30
|
+
|
|
31
|
+
顶部 **刷新列表** 仅读取服务当前结果,与重新采集不同。
|
|
32
|
+
|
|
33
|
+
## 状态是什么意思
|
|
34
|
+
|
|
35
|
+
| 状态 | 含义 |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| 在线 | 最近收到资源数据。SSH 只代表最近一次成功快照,不代表持续会话 |
|
|
38
|
+
| 未知 | 尚未取得资源数据;不能据此认为设备已接通 |
|
|
39
|
+
| 待采集 | 快照较早,例如 SSH 超过五分钟;可手动采集 |
|
|
40
|
+
| 未回报 | 云端超过 90 秒未收到 Driver 回报;旧读数保留 |
|
|
41
|
+
|
|
42
|
+
这些状态**都不是身份私钥过期**。设备休眠、前台终端关闭、Driver 进程停止或网络不可用,都可能导致未回报。依次确认设备唤醒、Driver 运行、控制面域名可达、系统时间准确。需要长期运行时,先核对用户级后台服务的安装计划,再由设备主人安装;本轮没有自动安装常驻服务。
|
|
43
|
+
|
|
44
|
+
为了兼容已有接口,`state: expired` 仍用于表示旧快照;面板根据原因显示待采集或未回报。资源字段的失败也分别保留,内存读取失败不会伪造磁盘数据。
|
|
45
|
+
|
|
46
|
+
## Agent 能读取什么
|
|
47
|
+
|
|
48
|
+
本机 MCP 的 `device_center_list_resources` 返回设备的 `name`、`reportedName`、`profile` 和原有资源字段。同账号的远程设备目录也附带云端保存的说明。Agent 可据用途筛选资源,再核对不可变设备 ID 和完整身份指纹。
|
|
49
|
+
|
|
50
|
+
说明是描述性数据,不能充当提示指令、操作授权或身份验证。改名不改变主机名、SSH 别名、密钥、配对或日志权限。
|
|
51
|
+
|
|
52
|
+
云端说明按账号与不可变设备 ID 保存,不会被后续资源回报覆盖。本机说明保存在本机数据库;**当前未实现本机说明与云端说明双向同步**,两边编辑分别生效。
|
|
53
|
+
|
|
54
|
+
## 本轮验收范围
|
|
55
|
+
|
|
56
|
+
自动测试覆盖字段校验、保存与刷新、并发修改冲突、账号隔离、同源保护、签名采集请求、重放拒绝、采集超时、离线保持旧数据和 MCP 可读性。浏览器验收使用独立的本机预览数据库及当前电脑的真实内存、磁盘读数,没有连接真实远程主机。
|
package/docs/driver-binding.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# 通过域名连接管理电脑
|
|
2
2
|
|
|
3
|
+
> 0.2.0-beta.1 更新:账号隔离、TLS 1.3 双向认证密文中转、独立授权的日志尾读及获准精确 LAN 优先已实现。旧文中的“尚未实现”传输描述属于此前阶段;实际操作与边界以 [远程日志](remote-access.md) 和 README 为准。通用远程命令、文件传输、Windows 原生 Agent 与自动迁移仍未提供。
|
|
3
4
|
当前支持个人控制面与 macOS / Linux 管理 Driver 的配对、只读资源回报和撤销。它不是远程终端或隧道;Windows Driver、独立安装器、系统钥匙串封装、远程任务和自动选路仍待实现。
|
|
4
5
|
|
|
5
6
|
## 三步接入
|
|
@@ -59,6 +60,10 @@ npm run service -- install --confirm --port 5174
|
|
|
59
60
|
|
|
60
61
|
云端保存公钥和 SHA256 指纹;配对码只保存 SHA256 摘要。所有者在现有个人登录边界内一次性批准,SQLite 事务消费请求,最多 16 个有效 Driver。机器轮询和回报需本机私钥签名,不依赖浏览器 cookie 或长期 Bearer token。签名涵盖固定协议、HTTPS Origin、POST 路径、Driver / 配对 ID、时间、随机数及排序后 JSON 的 SHA256;使用 Node 内置 Ed25519。随机数在 SQLite 保存三分钟,时间窗口 90 秒,拒绝重放,包括进程重启后的重放。
|
|
61
62
|
|
|
62
|
-
请求与响应上限 16 KiB
|
|
63
|
+
请求与响应上限 16 KiB,固定字段白名单;全实例每分钟最多八个配对申请;候选版本的查找与批准各自每账号八次、全实例各六十四次,最多 32 个待处理请求;配对轮询至少约五秒,回报至少 15 秒。公共申请入口仍可能遭遇拒绝服务,不适合直接扩为公开多用户托管。过期的配对请求与防重放记录按协议时效淘汰;已登记设备和回报不会自动清理。
|
|
63
64
|
|
|
64
65
|
当前测试验证隔离环境中的协议和 HTTP 接口。实际身份生成、用户批准、目标平台常驻、真实网络下连续回报需要由使用者执行接入后验收;不能以测试数据冒充已绑定设备。远程命令、文件传输与中继任务权限没有因配对而授予。
|
|
66
|
+
|
|
67
|
+
## 账号归属与候选版本
|
|
68
|
+
|
|
69
|
+
当前源码 beta.2 增加显式多用户账号隔离,未发布或部署;npm beta.1 客户端的机器配对/签名协议保持兼容。个人模式仍为默认;多用户的面板批准需同时提交码与完整指纹,归属只取服务核验的账号,不接受客户端 tenantId。历史个人记录不自动转移;多账号数据不能交给旧的无隔离服务器读取。详见[托管接入、迁移与回退](hosted-access.md)。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Device Center · 朋友试用指南
|
|
2
|
+
|
|
3
|
+
让本机 Agent 看见自己的电脑与闲置设备:真实内存、磁盘、设备用途,以及单独授权的指定日志。当前为 `0.2.0-beta.2` 公开试用版。
|
|
4
|
+
|
|
5
|
+
**入口:https://devices.owenshen.top/start**。支持 macOS / Linux,需要 Node.js 24+;Windows 原生版尚未支持。
|
|
6
|
+
|
|
7
|
+
## 1. 把安装交给本机 Agent
|
|
8
|
+
|
|
9
|
+
在入口选择 **本机使用** 或 **官方托管**,复制安装说明,粘贴给正在目标电脑上运行、具备软件安装能力的 Agent。
|
|
10
|
+
|
|
11
|
+
- 本机:无需账号,安装本机 Driver、面板和 MCP。
|
|
12
|
+
- 托管:设备上运行 Driver;官方服务提供账号面板与加密中转,私钥留在设备。
|
|
13
|
+
- 自建:填写已有 HTTPS 控制面域名,复用同一 CLI,不自动部署服务器。
|
|
14
|
+
|
|
15
|
+
Agent 按说明检查已有配置、固定版本安装、设置用户级后台服务、配置 MCP 并核验结果。已有配置冲突时解释并让你选择,不自动覆盖。系统授权或当前 Agent 无法配置 MCP 时,会请你完成对应一步。
|
|
16
|
+
|
|
17
|
+
不使用 Agent 时,可在全新环境运行 `npx --yes device-center@0.2.0-beta.2 start` 体验本机面板;这是前台方式,终端关闭后停止。长期使用按[完整安装指南](https://devices.owenshen.top/install/agent.md)固定安装。
|
|
18
|
+
|
|
19
|
+
## 2. 托管模式才需要登录绑定
|
|
20
|
+
|
|
21
|
+
在官方面板使用**自己的 App Services/个人站账号**登录;没有账号时在账号页注册。终端给出五分钟配对码和完整公钥指纹,在面板输入并核对后批准。
|
|
22
|
+
|
|
23
|
+
密码、私钥和配对码不发给朋友、不放入 Agent 对话。若 Agent 工具会把终端配对码记录进对话,仅在本机终端自行完成 `connect` 这一步。绑定只允许说明中的资源回报,不授予远程命令或日志权限。
|
|
24
|
+
|
|
25
|
+
在另一台自己的电脑重复安装,绑定同一账号。两端需要持续运行 Driver。云端不代替目标设备上的进程。
|
|
26
|
+
|
|
27
|
+
## 3. 请重点试这四件事
|
|
28
|
+
|
|
29
|
+
1. **资源**:内存、磁盘分开展示,数据和采集时间是否真实、清楚。
|
|
30
|
+
2. **命名**:在“设备说明”填写名字、用途、类型和标签,让 Agent 知道各设备适合做什么。服务与应用由你手动登记。
|
|
31
|
+
3. **刷新**:点“采集一次”,观察真实更新时间。旧 Driver 需更新;设备休眠或进程停止时应显示未回报,不伪装在线。
|
|
32
|
+
4. **MCP**:让本机 Agent 调用 `device_center_list_resources`,检查是否能读到资源和用途。
|
|
33
|
+
|
|
34
|
+
指定日志尾读属于可选进阶能力,需两端核对身份和目标设备单独授权,详见[远程日志](https://devices.owenshen.top/install/remote-access.md)。首次试用不需要授予它。
|
|
35
|
+
|
|
36
|
+
## 遇到问题与反馈
|
|
37
|
+
|
|
38
|
+
先检查 Node.js 24+、Driver 运行、设备唤醒、网络和系统时间。“待采集/未回报”指数据时效,不是私钥过期;刷新列表不会唤醒已停机设备。端口冲突时改用空闲本机端口,不停止其他程序。
|
|
39
|
+
|
|
40
|
+
把**系统、版本、所选模式、失败步骤、预期与实际结果**发给邀请你的人。附错误或截图前去掉私钥、配对码、cookie、设备地址及日志正文。
|
|
41
|
+
|
|
42
|
+
**当前边界:**未提供任意远程命令、通用文件传输、Windows 原生 Driver、自动扫描、离线局域网授权、本机与云端说明同步。官方试用中转每账号每日 100 MiB(UTC),每方向 16 KiB/s。MIT npm 源码包公开;GitHub 仓库可见性独立管理。
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 本机、官方与自建接入
|
|
2
|
+
|
|
3
|
+
本版本 0.2.0-beta.2 使用同一 CLI 支持官方与自建 HTTPS 控制面;每个账号独立管理自己的设备。安装不自动接入,connect --confirm 默认申请官方服务,用户登录并核对批准后才绑定。
|
|
4
|
+
|
|
5
|
+
## 用户流程
|
|
6
|
+
|
|
7
|
+
1. **本机使用**:运行 Driver → 添加本机智能体的 MCP → 导入已有 SSH。本机没有平台注册要求,只监听回环地址。
|
|
8
|
+
2. **需要云端面板**:本机侧栏点“云端面板” → 官方控制面或自建 HTTPS 域名 → 复制命令,在自己的电脑运行。
|
|
9
|
+
3. **确认归属**:登录对应面板的账号 → 输入终端上的五分钟配对码 → 核对完整公钥指纹和分享范围 → 批准 → 等待首次真实回报。
|
|
10
|
+
|
|
11
|
+
官方多用户模式复用 App Services 的已验证账号;每账号最多16台有效 Driver、100MiB/UTC日密文中转。执行命令前需 Node.js 24,支持 macOS/Linux。安装不会自动配对,复制不会执行,配对不会安装常驻服务。
|
|
12
|
+
|
|
13
|
+
同一 CLI 的 `--cloud` 指向所选控制面;默认只回报本机名称、系统、内存、磁盘。SSH 名称与缓存回报需要命令申请并在面板再次批准。私钥不托管到云端、不包含在复制命令、prompt 或下载包中。
|
|
14
|
+
|
|
15
|
+
## 部署者选择账号模式
|
|
16
|
+
|
|
17
|
+
保持现有私有配置不变或明确设置 `accountMode: "personal"`,仍只接受配置的 `ownerEmail`;密码方式仍只支持个人模式。不会因为升级源码就允许其他账号进入。
|
|
18
|
+
|
|
19
|
+
本地验证后的候选可显式配置 App Services 多用户模式,示例均为占位信息:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"provider": "app-services",
|
|
24
|
+
"accountMode": "multi-user",
|
|
25
|
+
"backendOrigin": "https://appapi.example.com",
|
|
26
|
+
"accountOrigin": "https://example.com"
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
该模式只允许上游已验证的非匿名 email/Google/Apple 账号;本项目不新增注册接口。所有参与域名必须属于同一受信任父域名,并复用既有共享 HttpOnly 会话。不是任意第三方域名的 OAuth 登录实现。
|
|
31
|
+
|
|
32
|
+
服务器从固定上游 `/v1/me` 核验身份,将发行方与稳定 `profile.id` 的摘要作为租户命名空间;不按邮箱合并用户,也不信任客户端的 userId、tenantId、HTTP 头或 JWT 自解码。每次受保护请求只解析一次身份,列表、统计、回报展示、撤销与设备上限均使用该命名空间。机器回报的归属只能来自已登记 Driver,不能由请求指定。
|
|
33
|
+
|
|
34
|
+
多用户批准要求有效码与完整指纹,事务只允许消费一次。登记请求在批准前没有账号归属;持有配对码的账号可以查找,所以只在你自己的终端和面板之间使用,核对浏览器当前登录账号。批准后其他账号的查找/再次批准不可见,撤销其他账号的设备返回与不存在相同的 404。
|
|
35
|
+
|
|
36
|
+
### 旧个人数据与回退
|
|
37
|
+
|
|
38
|
+
`cloud_drivers.tenant_id` 是增量列;历史记录保留为 `cloud-owner`,不会删除、按设备名称合并或自动移交。
|
|
39
|
+
|
|
40
|
+
已有历史记录的部署切换为多用户时,必须在仓库外的私有配置中增加 `legacyOwnerId`,值为**通过可信 `/v1/me` 核验过的原所有者稳定 profile.id**。它仅把原所有者映射回历史命名空间,其他账号使用各自摘要;没有映射时启动拒绝,避免历史设备被遗失或错误归属。不要填邮箱、浏览器自报 ID 或另一个用户 ID。该值不是私钥,也不应放进公开配置示例或日志。
|
|
41
|
+
|
|
42
|
+
上线前备份 SQLite 与私有配置并验证映射。回退至个人模式只显示历史所有者设备,其他账号行保留。较旧的不支持租户查询的服务器版本会读出所有账号,因此**有多账号数据之后不可直接回退旧代码**:应停止服务并恢复切换前的完整数据库/配置备份,保留切换后备份供恢复。不能只切换二进制或 current 链接。
|
|
43
|
+
|
|
44
|
+
## 实际能力与边界
|
|
45
|
+
|
|
46
|
+
已实现账号隔离、一次性批准、签名资源回报与撤销,以及 TLS 1.3 双向认证的指定日志读取。两端必须独立核对指纹并在目标授权;绑定本身没有操作权限。获准 LAN 精确地址优先,网络不可达时回退 HTTPS 密文中转。见[远程日志](remote-access.md)。
|
|
47
|
+
|
|
48
|
+
每天每账号100MiB、全实例1GiB持久计数;单会话60秒、每账号2/全实例8并发、每方向16KiB/s。签名 nonce 全实例4096/180秒,公共登记8/分钟/32待批准;查找/批准每账号8/分钟/全局64/分钟。内存限流会随重启重置,日流量不会。当前固定默认额度,尚无计费、付费服务或 SLA。
|
|
49
|
+
|
|
50
|
+
任意命令、通用文件传输、云端 MCP、Windows 原生 Agent、CF 专用适配器和自动配置迁移尚未提供。自建/官方使用相同中转实现;CF 仅可作为用户自行配置的 HTTPS 前置。
|
|
51
|
+
|
|
52
|
+
隔离测试使用临时身份与注入上游,验证真实 Node TLS、中转密文、权限、账号和配额。它们不是对真实用户设备的授权验收,也不构成第三方安全审计。
|
package/docs/npm.md
CHANGED
|
@@ -1,53 +1,37 @@
|
|
|
1
1
|
# npm / npx 分发
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## 使用者
|
|
6
|
-
|
|
7
|
-
只看帮助或回报范围,不产生身份、不安装后台服务:
|
|
3
|
+
MIT,Node.js 24,macOS/Linux。当前版本 `0.2.0-beta.2`,使用 npm `beta` 渠道;是否上架以公开 registry 为准。
|
|
8
4
|
|
|
9
5
|
```sh
|
|
10
|
-
npx --yes device-center@0.
|
|
11
|
-
npx --yes device-center@0.
|
|
6
|
+
npx --yes device-center@0.2.0-beta.2 --help
|
|
7
|
+
npx --yes device-center@0.2.0-beta.2 plan
|
|
8
|
+
# 主动接入默认官方服务,执行后在终端与面板之间核对配对
|
|
9
|
+
npx --yes device-center@0.2.0-beta.2 connect --confirm
|
|
10
|
+
# 自建服务
|
|
11
|
+
npx --yes device-center@0.2.0-beta.2 connect --cloud https://你的控制面域名 --confirm
|
|
12
|
+
# 仅本机,无账号要求
|
|
13
|
+
npx --yes device-center@0.2.0-beta.2 start
|
|
12
14
|
```
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
安装与无参/help/version/plan 不生成身份,不配对,不自动启动后台进程。复制命令不含凭据。只有 connect --confirm 才生成本机身份并申请绑定;默认官方地址不会自动批准,用户需登录自己的账号。SSH 缓存分享须 --share-ssh 与面板再次批准。
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
npx --yes device-center@0.1.0-beta.1 connect --cloud https://你的控制面域名 --confirm
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
只有 `connect --confirm` 才在本机生成身份并申请配对;终端显示五分钟码,用户单独输入面板、核对完整指纹和范围并批准。CLI 要求明确的 `--cloud`,不会默认把公开用户的电脑绑定到开发者的个人域名。SSH 名称/缓存分享需要 `--share-ssh` 与面板再次勾选批准。没有远程任务授权,详见[绑定说明](driver-binding.md)。
|
|
21
|
-
|
|
22
|
-
只在本机/局域网现有 SSH 配置下使用,不接云端:
|
|
18
|
+
面板和本机 MCP:`http://127.0.0.1:5174/`、`/mcp`。常驻先固定安装:
|
|
23
19
|
|
|
24
20
|
```sh
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
打开 `http://127.0.0.1:5174`;智能体 MCP 为 `http://127.0.0.1:5174/mcp`。只监听回环地址,不开放局域网端口。关闭网页不退出进程,终端 Ctrl+C 才停止。已有运行实例复用,其他端口占用会提示,不结束其他进程。
|
|
29
|
-
|
|
30
|
-
常驻需要固定安装位置,不能指向会被清理的 npx 缓存:
|
|
31
|
-
|
|
32
|
-
```sh
|
|
33
|
-
npm install -g device-center@0.1.0-beta.1
|
|
21
|
+
npm install -g device-center@0.2.0-beta.2
|
|
34
22
|
device-center service plan --port 5174
|
|
35
|
-
#
|
|
23
|
+
# 自行停止同端口前台进程,再主动安装
|
|
36
24
|
device-center service install --port 5174 --confirm
|
|
37
25
|
```
|
|
38
26
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## 发布者
|
|
42
|
-
|
|
43
|
-
本包使用显式文件白名单:CLI、运行源码、前端静态文件、Driver/服务脚本和必要说明。数据库、SSH/身份文件、认证配置、部署记录、测试 fixture、开发目录和归档均不发布;没有 install/postinstall/prepare 自动脚本。开发依赖与运行依赖当前均为零。
|
|
27
|
+
数据在用户应用数据目录,更新包不重置身份或数据库;npx 缓存不得用作常驻目录。Windows 原生身份存储和用户服务尚未提供。
|
|
44
28
|
|
|
45
|
-
|
|
29
|
+
远程指定日志需两端各自明确授权,见[远程日志](remote-access.md)。无通用远程命令或文件传输。
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
## 发布验证
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
包采用显式白名单,没有 install/postinstall/prepare 钩子;数据库、身份、SSH、认证配置、部署记录和测试不发布。标准 TLS 使用 Node/OpenSSL,X509 创建使用固定版本 @peculiar/x509 与 reflect-metadata,`npm-shrinkwrap.json` 固定传递依赖和 integrity;不再是零依赖包。源码解压后先 `npm ci --ignore-scripts`。
|
|
50
34
|
|
|
51
|
-
|
|
35
|
+
发布前运行 check/test/verify:package;后者在独立临时 HOME 中无凭据从官方 registry 取得依赖,随后离线安装本次 tar、检查真实 bin/npx/前台 HTTP。候选归档、逐文件摘要、Git 基线、dirty 快照事实及验证结果保留在本机 npm-candidates。只清理本次测试临时目录,不清理用户数据。工作区快照不称为 main CI 构建。
|
|
52
36
|
|
|
53
|
-
|
|
37
|
+
固定新版本 `npm publish <已验证tar> --access public --tag beta`。密码、发布验证与 OTP 由用户在 npm 官方页面自行处理,不进聊天或归档。发布后匿名查询 registry、核对 SHA512 integrity 和 tar 字节,并运行帮助/计划。GitHub 仓库公开与 npm 发布是独立操作,本轮不改变 GitHub 可见性。
|
package/docs/onboarding.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# 从首次使用到添加设备
|
|
2
2
|
|
|
3
|
+
> 0.2.0-beta.1 更新:账号隔离、TLS 1.3 双向认证密文中转、独立授权的日志尾读及获准精确 LAN 优先已实现。旧文中的“尚未实现”传输描述属于此前阶段;实际操作与边界以 [远程日志](remote-access.md) 和 README 为准。通用远程命令、文件传输、Windows 原生 Agent 与自动迁移仍未提供。
|
|
3
4
|
目标是让用户只完成必要的复制、粘贴和确认。面板统一用“管理电脑 → 智能体 → 设备”三步引导;部署、协议、常驻服务和排查放到文档或展开说明。下面区分已实现与待实现,不能把目标流程当成已接通。
|
|
4
5
|
|
|
5
6
|
## 当前本机原型
|
|
@@ -14,27 +15,29 @@
|
|
|
14
15
|
|
|
15
16
|
控制面与管理电脑可能是两台机器。当前服务只读取自己所在机器的配置;服务器配置不能代替用户电脑的配置,Docker 也不会取得宿主 SSH 权限。
|
|
16
17
|
|
|
17
|
-
当前支持 macOS/Linux
|
|
18
|
+
当前支持 macOS/Linux 管理 Driver,需要 Node.js 24,操作收敛为:
|
|
18
19
|
|
|
19
20
|
1. 打开云端面板,点 **连接我的电脑**。
|
|
20
|
-
2.
|
|
21
|
+
2. 复制固定版本 npx 命令,在自己的电脑终端运行(也可下载源码并在源码目录运行)。回面板输入终端配对码,核对完整公钥指纹并批准;不搬运 SSH 密钥或填写私网地址。需要 Node.js 24,尚无签名安装包。
|
|
21
22
|
3. 管理电脑实际回报后,云端显示名称、内存和磁盘。本机面板继续提供 **智能体 → 设备**:智能体连接本机 Driver 的 MCP,一键导入该电脑的 SSH 引用。云端目前不能执行这些检查或远程任务。
|
|
22
23
|
|
|
23
24
|
Driver 主动建立获准的安全出站连接。短时一次性登记凭据应由用户单独交互输入,不嵌入 prompt、脚本、压缩包或日志。身份私钥在设备生成并保留,SSH 私钥、身份路径、局域网端点与认证留在管理电脑。云端只同步经用户批准的非秘密登记信息和明确可见范围的回报;导入不转移任务权限、主机信任或在线状态。
|
|
24
25
|
|
|
25
26
|
个人云端面板的 HTTPS、所有者登录、管理 Driver 配对、签名回报与撤销已经实现;未绑定时显示空列表,不读取服务器 SSH。默认仅回报本机指标,SSH 名称与缓存状态需要双重显式批准。**尚未实现:** 独立资源设备 Agent、Windows Driver、签名安装包、系统钥匙串封装与配置迁移。完整操作与排查见[域名绑定](driver-binding.md)。没有演示绑定成功。管理电脑离线时,依赖它的 SSH 路径不可用;云端面板在线不会替代它完成认证。
|
|
26
27
|
|
|
28
|
+
本机侧栏也可点“云端面板”,选择官方控制面或自己的 HTTPS 域名后复制命令。0.2 系列已支持显式多账号隔离,官方服务使用 multi-user 模式。账号模式和历史数据迁移见[托管接入说明](hosted-access.md)。
|
|
29
|
+
|
|
27
30
|
## 后续添加新设备的目标流程
|
|
28
31
|
|
|
29
32
|
| 目标设备条件 | 用户最少操作 | 结果条件 |
|
|
30
33
|
| --- | --- | --- |
|
|
31
34
|
| 管理电脑已有可用 SSH 配置 | 一键导入引用 | 导入后自动检查一次,取得真实资源后才显示近期在线与资源 |
|
|
32
|
-
| 目标设备已有智能体 | 复制安装指导,交给目标机智能体;确认安装与绑定 |
|
|
35
|
+
| 目标设备已有智能体 | 复制安装指导,交给目标机智能体;确认安装与绑定 | 0.2.0-beta.2 可复制完整安装说明,本机生成身份并核对配对与真实回报;签名安装器待实现 |
|
|
33
36
|
| 目标设备没有智能体 | 下载对应平台的验签安装包,在目标机运行并批准绑定 | 与智能体辅助方式使用同一接入协议;待实现 |
|
|
34
37
|
| 不能安装 Agent,也没有可用 SSH | 明示缺少接入条件 | 保持未知,不伪装接通 |
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
SSH 连接偏好目前只保存为计划。新 Driver 的日志通道已支持获准精确 LAN 入口优先与官方/自建密文中转,详见[远程日志](remote-access.md);CF 专用适配器待实现。不会扫描网段、自动创建隧道或让用户先手动复制长期密钥。
|
|
37
40
|
|
|
38
41
|
## 日常使用
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
打开设备列表即可看当前路径和真实快照;导入后执行一次固定只读检查,后续检查由用户发起。智能体已可通过连接器读取另行授权的指定日志;构建、计算及任意远程任务尚未提供。修改连接偏好不会改变授权。错误应明确发生在 Driver 接入、配置导入、SSH 认证或资源采集哪一步,保留可重试入口,不用重新走完整流程。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# 远程日志:明确授权后使用
|
|
2
|
+
|
|
3
|
+
本版本 0.2.0-beta.2 支持 macOS / Linux、Node.js 24。两台设备主动连接同一 HTTPS 控制面,默认使用 `https://devices.owenshen.top`;可用 `--cloud https://你的域名` 替换。安装或查看帮助不会产生身份、配对或运行远程操作。
|
|
4
|
+
|
|
5
|
+
## 最短流程
|
|
6
|
+
|
|
7
|
+
在管理电脑和目标设备分别运行:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install -g device-center@0.2.0-beta.2
|
|
11
|
+
device-center connect --confirm
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
登录控制面的**自己的账号**,输入各自终端上的五分钟配对码,核对完整公钥指纹并批准。保持前台进程运行,或按 `device-center service plan` 的结果单独安装用户级后台服务。不要从 npx 缓存安装常驻服务。旧版本已绑定设备先升级,再运行 `device-center access enable --confirm`,为原有身份生成并登记自签证书,不复制私钥。
|
|
15
|
+
|
|
16
|
+
两台设备各运行 `device-center access peers`,通过可信渠道核对完整指纹。在管理电脑终端运行(替换占位符):
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
device-center access trust --peer 目标设备完整指纹 --confirm
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
在目标设备终端运行(替换指纹和绝对路径):
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
device-center access grant --peer 管理电脑完整指纹 --log /绝对路径/app.log --label app --minutes 60 --confirm
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
每条授权只允许一个日志标签、一个规范化绝对文件路径和一台管理电脑;有效期 1–1440 分钟,每次最多 65536 字节。符号链接、多个硬链接、非普通文件、路径替换和过期授权均拒绝。常规日志轮转到同一规范化路径的新普通文件允许读取;旧文件不跟随。UTF-8 尾部从字符中间截断时可能出现替代字符。
|
|
29
|
+
|
|
30
|
+
管理电脑的智能体连接本机 MCP 后可调用:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{"name":"device_center_read_log","arguments":{"fingerprint":"目标设备的64位完整公钥指纹","label":"app","bytes":16384}}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
也可在管理电脑使用 `device-center access read --peer 目标完整指纹 --label app`。结果包含文本、字节数、采集时间和实际路径 `cloud-relay` 或 `lan-direct`,网络回退时还包含原因。只支持日志尾部读取,不能运行任意命令、读取其他路径或上传文件。
|
|
37
|
+
|
|
38
|
+
## 可选:已知局域网地址优先
|
|
39
|
+
|
|
40
|
+
默认不开局域网监听。设备主人确认目标的准确私网地址后,在目标运行:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
device-center access listen --bind 192.168.1.10 --port 5181 --confirm
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
管理电脑重新执行 trust,增加 `--lan 192.168.1.10 --port 5181`。仅允许明确 RFC1918 IPv4 / ULA IPv6 地址;拒绝通配监听、公网地址和主机名。不扫描网段,不配置防火墙。目标必须仍运行 Driver。
|
|
47
|
+
|
|
48
|
+
管理电脑先认证直连;仅连接拒绝、超时、路由不可达时回退云端密文中转。身份不匹配、证书无效、授权拒绝不会换路重试。操作结果给出实际路径,不能从设备名称判断路线。SSH 清单中的“连接计划”仍是独立元数据,本能力不会修改已有 SSH 配置。
|
|
49
|
+
|
|
50
|
+
两种路径都先向控制面核验当前账号成员与撤销状态;控制面不可用时拒绝新日志操作。因此本版不是离线 LAN 管理方案。
|
|
51
|
+
|
|
52
|
+
## 安全与额度
|
|
53
|
+
|
|
54
|
+
- 设备本机生成 Ed25519 身份;私钥仅存本机用户私有目录、0600 文件,不进入命令、prompt、下载包或云端。当前未使用 Keychain/TPM。
|
|
55
|
+
- Node/OpenSSL TLS 1.3 双向认证;两端固定手动核对过的设备证书和完整公钥指纹,开启证书与主机名校验。云端只有公钥/公开证书,转发密文,不能从转发帧取得日志内容。初次核对指纹的可信渠道仍由用户负责。
|
|
56
|
+
- 自签证书有效一年,到期在设备运行 `access renew --confirm` 更新证书,另一端重新 trust/grant 固定新证书,不承诺自动轮转。操作系统管理员和被授权的管理电脑仍属于信任边界。
|
|
57
|
+
- 云端知道账号归属、设备名称、系统、获准指标、通信时间、对象与流量大小。端到端加密不隐藏这些元数据。
|
|
58
|
+
- 默认每账号每天 100 MiB、全实例每天 1 GiB,UTC 零点按日期换桶;SQLite 持久计数,重启不清零。每方向最多 16 KiB/s,单会话60秒、每账号2个/全实例8个并发。当前固定默认值;没有计费或付费套餐。
|
|
59
|
+
- 两端本地 `access-audit.jsonl` 记录指纹、标签、时间、路线、字节数与结果,不记日志内容。超过1MiB时拒绝新的日志读取,需用户自行归档后恢复;不自动清理用户审计或日志。
|
|
60
|
+
- 云端撤销会拒绝后续 API 和中转帧,新 LAN 操作也检查撤销。已经返回的数据无法收回;本版一次读取最大64KiB,不支持取消后追溯删除。
|
|
61
|
+
|
|
62
|
+
## 撤销和排查
|
|
63
|
+
|
|
64
|
+
目标运行 `device-center access revoke --peer 管理电脑完整指纹 --confirm` 立即移除本机授权;`access listen-off --confirm` 关闭自选 LAN 入口(运行进程三秒内重读)。`access status` 只读本机权限;`status` 只读绑定,不显示私钥。
|
|
65
|
+
|
|
66
|
+
| 错误 | 检查 |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| driver_not_bound / driver_secure_identity_required | 两台设备是否完成同账号配对;旧版是否 access enable |
|
|
69
|
+
| access_peer_not_trusted | 管理电脑是否核对指纹并 trust |
|
|
70
|
+
| access_log_not_granted | 目标是否 grant 相同管理指纹与标签,是否已到期或撤销 |
|
|
71
|
+
| relay_unavailable / access_request_timeout | 目标 Driver 是否运行、HTTPS 出站能否访问、时钟是否准确 |
|
|
72
|
+
| relay_quota_exceeded / relay_busy | 当日额度或并发已满,等待或使用获准直连/自己的控制面 |
|
|
73
|
+
| 证书或身份错误 | 停止操作,独立核对指纹、证书有效期和本机时间;不要关闭 TLS 校验 |
|
|
74
|
+
| access_audit_unavailable | 查看本机审计文件权限和容量,自行归档,不上传身份文件 |
|
|
75
|
+
|
|
76
|
+
CF 可用于用户自行配置 HTTPS 控制面入口;本版没有 CF 专用中转适配器,也不保证其免费套餐适用于任何流量。
|
package/docs/roadmap.md
CHANGED
|
@@ -1,36 +1,25 @@
|
|
|
1
1
|
# Roadmap
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 0.2 系列已实现
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- 本机真实内存与磁盘、已有 SSH 配置引用、显式受限只读检查、共享本机 MCP 资源清单。
|
|
6
|
+
- 统一账号与租户隔离、五分钟配对批准、本机身份私钥、签名回报和撤销。
|
|
7
|
+
- 独立授权的指定日志尾读、双向 TLS 1.3、官方/自建密文中转与持久日额度。
|
|
8
|
+
- 已批准的精确 LAN 入口优先;仅网络失败回退,身份/权限失败停止,两种路径均需控制面在线。
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
## 0.2.0-beta.2
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
- 设备名称、类型、用途、标签及用户手动登记的服务清单,提供给 Agent 资源目录。
|
|
13
|
+
- 本机与云端资源手动采集;旧 Driver 需升级,离线设备不伪装在线。
|
|
14
|
+
- “交给 Agent 安装”:本机、官方托管、已有自建服务;固定版本、用户级后台与 MCP 步骤。
|
|
15
|
+
- 免登录的一页试用指南。登录、完整指纹核对和设备批准仍由用户完成。
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
## 后续候选
|
|
12
18
|
|
|
13
|
-
|
|
19
|
+
1. 验证各平台真实常驻、升级和恢复;减少 Node 与终端依赖。
|
|
20
|
+
2. Windows 原生身份安全存储与用户服务;签名安装器。
|
|
21
|
+
3. 本机与云端非秘密说明的同步及冲突处理,不迁移私钥或自动扩大授权。
|
|
22
|
+
4. 更多单独授权的能力,例如 Windows 构建验收;当前没有任意远程命令或通用文件传输。
|
|
23
|
+
5. 公开 GitHub 仓库与私密安全报告渠道,由项目主人分别决定。
|
|
14
24
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
基础资源检查已实现。下一步通过已有 SSH 提供一个范围明确的能力,例如读取指定 Windows 构建日志。复用本机认证与主机密钥核验,不托管或导出 SSH 私钥;复杂配置需审核,拒绝关闭验钥,并明确任务授权、超时、输出上限和审计。不能把别名发现或关联当成执行权限。指定日志、构建和计算任务尚未实现。
|
|
18
|
-
|
|
19
|
-
## 下一阶段:普通用户安装
|
|
20
|
-
|
|
21
|
-
1. 稳定本机服务目录、升级与卸载规则;验证 macOS/Linux 的常驻和恢复。
|
|
22
|
-
2. Windows 用户级常驻方式;各平台签名安装包,减少源码、Node 和终端依赖。
|
|
23
|
-
3. 源码运行已有管理电脑/智能体/设备三步向导;签名安装后的接入和恢复仍待验证,错误须指出服务/端口/客户端启动问题,不把“配置存在”当成接入成功。
|
|
24
|
-
4. 确定许可证、公开仓库计划、发布根与私密安全报告渠道。
|
|
25
|
-
|
|
26
|
-
## 资源 Agent 与安全登记
|
|
27
|
-
|
|
28
|
-
本机身份生成和密钥保管,验签安装包,短期一次性登记码,设备主动安全出站连接,首次真实回报与独立内存/磁盘采集。现有 AI 协助安装与无 AI 的脚本安装使用同一个流程。需要单独设计和验证,尚未实现。
|
|
29
|
-
|
|
30
|
-
## 有用的能力
|
|
31
|
-
|
|
32
|
-
首先选择一个小范围能力,例如读取用户指定日志;随后才是 Windows 构建、测试与有额度限制的闲置计算。每项能力单独授权,限制目标、路径、持续时间和额度,提供取消、结果与审计;不开放任意远程 shell。
|
|
33
|
-
|
|
34
|
-
## 跨网络与上线迁移
|
|
35
|
-
|
|
36
|
-
已批准的 LAN 端点认证直连、经明确选择的自建或托管中继、端到端加密;只同步非秘密登记配置,保留本地身份与 LAN 设置,新端点需用户批准。配额耗尽可解释,不能自动换路或扩大权限。参见安全与同步设计;没有真实上线、托管、限速或同步接口。
|
|
25
|
+
已有 SSH“连接计划”只保存元数据,不改变原 SSH 路径或自动接入 Driver 通道。未实现自动扫描、离线局域网授权、CF 专用适配器、付费计费及自动配置迁移。参见[远程日志](remote-access.md)、[设备说明](device-profiles.md)和[安全边界](../SECURITY.md)。
|
|
@@ -1,72 +1,17 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 安全与同步边界
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
设备身份私钥仅在本机用户私有目录/0600文件。公钥、公开证书和获准指标进入控制面;SSH 私钥、配置原文和日志授权路径不上传。当前未使用 Keychain/TPM;系统管理员属于信任边界。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
配对码五分钟、一次性消费;用户在云端核对完整指纹并批准,只授权资源回报。设备请求签名覆盖控制面 Origin、路径、设备、时间、随机 nonce 和规范化载荷摘要;nonce 持久存 SQLite,拒绝重放与时钟偏差。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
App Services 账号由固定 HTTPS `/v1/me` 核验,不解码自报 JWT 作为信任。稳定 issuer/subject 摘要派生租户,所有查询和撤销按服务端已核验租户限定。上游不可用时拒绝;密码认证只支持个人模式。旧个人归属与回退见[托管接入](hosted-access.md)。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
远程日志使用 Node/OpenSSL TLS 1.3 双向认证,两端固定经核对的证书/指纹。目标本机 grant 只允许指定管理身份、标签、规范化文件路径和截止时间;每次最多64KiB。禁止任意命令、任意路径、符号链接/多硬链接/非普通文件。直连和云中转都核验当前云端成员,撤销后拒绝新操作。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
云端中转只见密文与账号/设备/流量元数据。配额每日持久计数,队列、帧、会话、速率和并发均有界。两端本机审计不保存日志内容;超容量拒绝,不自动清理。详见[授权与额度](remote-access.md)。
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| 资源设备身份私钥 | 资源设备的系统安全存储 | 永不导出到控制面、prompt 或安装包 |
|
|
16
|
-
| 管理 Connector 身份私钥 | 管理电脑的系统安全存储 | 永不导出到控制面 |
|
|
17
|
-
| 用户 API 密钥、SSH 私钥等任务凭据 | 用户选择的本机安全存储 | 第一版不提供服务端托管 |
|
|
18
|
-
| 设备 ID、公钥与经核验的归属 | 用户的登记空间 | 可以同步;生产导入需验证所有权证明 |
|
|
19
|
-
| 名称、项目归属、连接偏好 | 用户的登记空间 | 可以同步,按共同基线合并 |
|
|
20
|
-
| 局域网端点、私网 IP、系统配置 | 本地 Connector / 设备 | 保留本地,不公开到云端登记清单 |
|
|
21
|
-
| 短时一次性登记凭据 | 登记服务短时签发,目标机交互输入 | 不放进同步文件、prompt、脚本、压缩包或日志 |
|
|
22
|
-
| 操作授权 | 管理端签发,目标设备核验与执行 | 不随配置同步复制或扩大 |
|
|
23
|
-
| 在线状态、内存、磁盘 | 各环境实际观察到的 Agent 回报 | 不随登记配置复制 |
|
|
24
|
-
| 服务 TLS / 签发密钥 | 控制面运营者的独立密钥管理设施 | 属于服务自身,不能替代用户设备授权 |
|
|
13
|
+
## 配置迁移仍未提供
|
|
25
14
|
|
|
26
|
-
|
|
15
|
+
目前同步的是获准资源状态,不是 SSH 凭据、日志权限或整套部署配置。本机 SQLite 不自动复制到云端,身份不迁移、同名设备不自动合并。多个控制面之间的三方合并、撤销传播、离线同步、灾难恢复和后台配置迁移仍需独立设计与验收。
|
|
27
16
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
## 托管中继的信任边界
|
|
31
|
-
|
|
32
|
-
目标是由管理 Connector 与资源 Agent 认证彼此、加密任务指令和日志 / 文件内容,中继转发密文。控制面或中继的密钥不能单独赋予执行任务的能力。设备必须核验管理端签名的、范围明确且有时效的授权,约束操作、路径、时间和资源额度。
|
|
33
|
-
|
|
34
|
-
生产版本仍需选择成熟的加密协议与库,设计经过身份核验的公钥分发、首次配对、防重放、会话密钥、撤销和恢复。当前仅有设计说明,不能宣传已经提供端到端加密或零知识托管。运营者能观察账号和设备登记元数据、在线状态、IP、连接时间与流量大小;这些可见范围和保留时间应公开说明。
|
|
35
|
-
|
|
36
|
-
| 风险 | 需要落实的控制 |
|
|
37
|
-
| --- | --- |
|
|
38
|
-
| 云端被攻破或运营者替换登记公钥 | 端点在本地核验并固定身份;换身份需重新批准;指令须有管理端授权 |
|
|
39
|
-
| 安装包或升级被替换 | 验证独立发布签名与构建来源;不关闭验签;公开对应源码版本 |
|
|
40
|
-
| 登记码被复制或重放 | 短时、单次消费、归属绑定、频率限制与撤销 |
|
|
41
|
-
| AI 误用资源设备能力 | 按设备、能力、路径、时间和资源上限单独授权;设备端执行限制 |
|
|
42
|
-
| 中继断开或流量耗尽 | 显示真实故障与额度原因;保留批准过的局域网路径;不绕过策略自动换供应商 |
|
|
43
|
-
| 设备丢失或凭据泄露 | 撤销设备 / Connector 身份和授权;离线授权必须短时失效;重新登记遵循核验流程 |
|
|
44
|
-
|
|
45
|
-
开源源码可供审查,但还需要实际部署版本的来源、发布签名、数据保留说明和安全报告渠道。安全审计、密码协议审查和生产隔离尚未完成。
|
|
46
|
-
|
|
47
|
-
参考:[OWASP Secrets Management](https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html)、[OWASP Cryptographic Storage](https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html)、[NIST SP 800-57](https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final)。这些是设计依据,不代表当前原型已通过认证或审计。
|
|
48
|
-
|
|
49
|
-
## 本地配置上线流程
|
|
50
|
-
|
|
51
|
-
1. 管理电脑保留自己的登记空间、设备 ID、身份公钥及本地连接配置。
|
|
52
|
-
2. 配置并核验线上控制面。用户选择自建或托管,对应的账号归属和服务身份必须明确。
|
|
53
|
-
3. 预览可同步字段和目标变化。未知字段一律拒绝,不自动导出私钥、凭据或授权。
|
|
54
|
-
4. 首次同步登记已具备身份的设备;尚未登记身份的设备暂缓。目标环境显示“未知”,等待自己的真实 Agent 回报。
|
|
55
|
-
5. 向已有可信关系中的设备提供新控制面信息;用户批准后由设备主动回连。设备身份、原有局域网连接和授权范围保留。
|
|
56
|
-
6. 后续同步以最后一次共同配置为基线。只有一侧修改时带到另一侧;两侧修改同一字段时用户选择结果。应用前校验两端版本,过时的预览返回冲突并重新预览。
|
|
57
|
-
|
|
58
|
-
生产协议应将登记空间 ID 与设备 ID 组合为稳定身份,验证公钥及归属证明,携带基线和每项配置的版本。采用事务更新、防回滚、幂等重试和可追踪的变更记录。客户端时钟不能作为自动覆盖依据。设备删除、撤销和授权回收需要独立的签名事件 / tombstone 与版本,不能通过旧配置重建已经撤销的设备。
|
|
59
|
-
|
|
60
|
-
三方合并、删除/撤销、真实公钥分发、多租户登录、远程导入、后台同步、离线传输和灾难恢复均未实现。之前的本机模拟合并已移除,不能作为生产迁移协议使用。
|
|
61
|
-
|
|
62
|
-
## 带宽配额
|
|
63
|
-
|
|
64
|
-
托管服务可以限制月度中继流量和大文件传输速率。状态心跳、认证、取消和撤销使用独立的小流量额度与防滥用限制,避免大文件占满配额后无法管理设备。获准的局域网直连不消耗托管中继流量;自建中继按用户配置处理。
|
|
65
|
-
|
|
66
|
-
显示已用流量、上限、速率、更新时间与受限原因。配额用尽时暂停或限速批量传输,保留取消与状态可见;不自动扣费、换到未经批准的中继或扩大权限。当前没有运营套餐、配额或限速实现。
|
|
67
|
-
|
|
68
|
-
## 当前实现范围(2026-10-07)
|
|
69
|
-
|
|
70
|
-
本机 Driver 真实采集、SSH 候选与显式关联、所有者触发的固定 SSH 资源检查、四个只读 HTTP MCP 工具可运行。关联表只保存别名和时间,快照表另存配置摘要与归一化采集结果;不存凭据、身份路径或原始输出。资源快照五分钟过期,未取得资源为未知。连通性单独显示认证结果,不把资源脚本失败当作 SSH 认证失败。模拟配置、示例身份、配额及导出入口已移除,没有真实线上同步接口。MCP 初始化记录不证明身份或设备连接。
|
|
71
|
-
|
|
72
|
-
上述安全与迁移流程保留为下一阶段设计:先补齐身份、鉴权、Agent 和单独任务授权,再实现获准字段的同步及冲突处理。启动不迁移、清理或上传现有配置。不能将此文档当成已验证的生产安全承诺。
|
|
17
|
+
不要上传完整 HOME、SSH 目录、身份文件或真实 token 作为诊断包。公开 MIT 源码和有限测试不等于第三方安全审计。
|
package/login.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>登录 · Device Center</title><link rel="stylesheet" href="/src/login.css"></head>
|
|
4
|
-
<body><main><div class="mark">DC</div><h1>Device Center</h1><p>登录你的设备控制面</p><p id="loading" role="status">正在读取登录方式…</p><form id="login" hidden><label>用户名<input name="username" autocomplete="username" required maxlength="64"></label><label>密码<input name="password" type="password" autocomplete="current-password" required maxlength="256"></label><button type="submit">登录</button><p id="message" role="alert"></p></form><section id="unified" hidden><p>使用 App Services/个人站的统一账号。</p><a id="unified-login" class="login-link" target="_blank" rel="noopener noreferrer">使用统一账号登录 ↗</a><p class="help">在新页面用邮箱或 Google 完成登录,回到这里会自动进入设备面板。</p><button id="continue-login" type="button">我已登录,继续</button><p id="unified-message" role="status"></p></section><small
|
|
4
|
+
<body><main><div class="mark">DC</div><h1>Device Center</h1><p>登录你的设备控制面</p><p id="loading" role="status">正在读取登录方式…</p><form id="login" hidden><label>用户名<input name="username" autocomplete="username" required maxlength="64"></label><label>密码<input name="password" type="password" autocomplete="current-password" required maxlength="256"></label><button type="submit">登录</button><p id="message" role="alert"></p></form><section id="unified" hidden><p>使用 App Services/个人站的统一账号。</p><a id="unified-login" class="login-link" target="_blank" rel="noopener noreferrer">使用统一账号登录 ↗</a><p class="help">在新页面用邮箱或 Google 完成登录,回到这里会自动进入设备面板。</p><button id="continue-login" type="button">我已登录,继续</button><p id="unified-message" role="status"></p></section><p class="install-help">还未安装?<a href="/start" target="_blank" rel="noopener noreferrer">查看一页试用指南 ↗</a><br><span>本机使用无需账号;官方托管需登录并核对绑定。</span></p><small id="access-notes">账号登录 · HTTPS 保护</small></main><script type="module" src="/src/login.js"></script></body>
|
|
5
5
|
</html>
|