# Windows 会发生什么变更，以及如何退出内测

更新：2026-09-28 · [English](windows-access-and-removal.md)

**批准安装前先阅读。** Agent Road 提供管理员级远程操作能力，不是不可信脚本沙箱。当前 Alpha **没有受支持的一键解绑或完整卸载命令**。退出需要按本机实际状态制定计划，由设备主人批准并核验。本文是人工协助检查单，不是已经在所有环境验收的卸载程序。

## 你将批准哪些变更

| 位置 | 接入可能做什么 | 必须保留什么 |
| --- | --- | --- |
| Windows 本地账号 | 创建 `AgentRoad` 账号并加入本地 Administrators 组 | 其他用户、资料和文件；已有同名账号必须诊断，不能直接接管 |
| OpenSSH | 必要时安装系统能力，配置 `sshd`、启动/恢复策略和固定主机密钥访问 | 原有 SSH 配置、服务策略与其他合法用户 |
| SSH 授权 | 在 `C:\ProgramData\AgentRoad\ssh\authorized_keys` 保存该账号的授权公钥 | 凭据和证据保持私密；先辨认具体控制端，再变更授权 |
| 网络 | 必要时安装、配置 Tailscale 并加入批准的网络 | 原有网络身份、策略与其他远程访问 |
| 防火墙 | 添加 `AgentRoad-OpenSSH-Tailscale`，将 SSH 限定在 Tailscale；可能关闭系统宽泛的 `OpenSSH-Server-In-TCP` 规则 | 既有规则和合法服务；退出时不能顺手打开宽泛入站规则 |
| 运行时与记录 | 在 `C:\ProgramData\AgentRoad` 下保存接入 journal、私有运行时和任务记录 | 先保留诊断与结果，再由主人决定清理范围 |
| 你提交的任务 | 后台任务可创建计划任务和文件；获准执行的脚本还能修改目录外内容 | 盘点实际做过的工作；卸载连接工具不会自动撤销任意脚本的影响 |

实际变更取决于内测包版本、已有环境和安装阶段。安装失败或中断不等于已接入；应按对应 journal 和原说明诊断，不能把 bootstrap 回滚当成通用卸载器。

“Windows 主人无需另注册 Agent Road”说的是无需第二个**网站账号**，不是不会创建 Windows 本地账号。Windows 不需要再跑一个 AI 模型。

## 三件事要分开

| 操作 | 能做到什么 | 不会做到什么 |
| --- | --- | --- |
| 网站撤销控制端 / `agent-road logout` | 撤销该控制端发起新配对的账号授权 | 不删除 Windows SSH 授权，不关闭已有会话，不取消任务，不卸载 |
| 撤销设备访问 | 主人或维护者移除指定控制端实际使用的 SSH/网络权限，并验证 | 不自动停止独立任务，也不回滚过去的脚本变更 |
| 清理 / 卸载 | 在访问和任务已停止后，移除确认属于本次内测的内容 | 不能猜测共享工具和系统设置的安装前状态 |

删除 Mac 上的控制器状态**不等于撤销**：密钥可能已有副本，还会丢失必要的盘点记录。Mac 已丢失时，需要在 Windows 本地或通过其他获准的管理路径处理。

## 由 Windows 主人与维护者配合退出

1. **先安排独立入口。** 主人在 Windows 旁边，或保留另一个明确授权的管理通道。不要先断开唯一连接，再期待远程清理完成。没有独立入口时，先记录阻塞并安排本地协助。
2. **停止发起新工作并确认范围。** 私下记录内测包版本、目标设备、控制端、Windows 账号/SID 和运行中的任务 ID。区分专用与共享组件，不把私钥或完整状态文件发到支持消息里。
3. **撤销网站控制端授权。** 在账号页面撤销对应控制端；Mac 仍可用时，使用它原来的控制器状态执行 `agent-road logout`。核对结果，但不能据此宣布设备已经断开。
4. **先核对任务，再删记录。** 对已知任务 ID 查询状态和日志。主人同意后仅取消明确识别的运行中任务，再检查终态。确认终止后才移除计划任务定义；`job remove` 会保留文件和结果。其他方式启动的进程另行核对，SSH 断开不代表任务停止。
5. **由 Windows 管理员撤销实际访问。** 检查生效的 `sshd_config` 和授权公钥来源，匹配目标控制端的公钥指纹，先列明具体改动。仅移除目标控制端的授权，保留 ACL、所有权及其他用户；不要整份删除公钥文件。主人批准后，可将禁用专用 `AgentRoad` 账号作为隔离的一部分，但这不证明已建立会话终止。账号共享或身份不明时停下核查。
6. **单独关闭已有会话。** 辨认并结束目标会话/进程。停止共享 SSH/Tailscale 服务，或把整台设备移出 tailnet，可能影响其他使用者，需明确批准影响范围。变更后仍应核对旧会话和独立后台任务，不能只看新连接失败。
7. **先验证，再删除。** 在安全且获准的情况下，从旧控制端尝试一次全新连接并确认拒绝，同时确认已有会话关闭、约定任务已停止。仅超时或设备离线不是密钥已撤销的证据；还要在本地核对生效账号/公钥状态，并检查其他合法访问未受损。不能验证的项目写“未知”，不能写完成。
8. **最后决定清理范围。** 根据安装前证据，逐项批准删除本次新增的专用账号/用户目录、运行时、任务文件和工具。只有原状态明确且仍然适用时，才恢复 SSH、服务或防火墙设置。保留原有 Git、Node.js、Python、OpenSSH、Tailscale。没有基线就保留共享组件、报告部分清理，不使用一条命令整目录删除。

若怀疑有人正在进行未授权访问，应先由主人在本地进行适当隔离。断网或停用共享服务会影响其他工作，也不会自动停止本地任务；保留证据并安排独立恢复入口。

## 怎样报告完成

```text
内测包与版本：
账号授权撤销：已验证 / 未知
旧控制端新建连接被拒绝：已验证 / 未知
已有会话关闭：已验证 / 未知
已知后台任务：已停止 / 经主人同意保留 / 未知
删除的组件与保留的共享组件：
已恢复的设置 / 缺失的基线：
其他合法访问检查：
剩余文件与保留原因：
主人确认：
```

不能把“logout 成功”写成“完整卸载成功”。本次仅补文档，**没有执行 Windows 退出/卸载闭环验收**。

维护者依据：`windows/bootstrap-stage-one.ps1`（账号、公钥、服务、防火墙、事务回滚）、`tools/native-setup/`（未发布的独立原生候选）、`src/auth/client.mjs`（账号退出）及 `docs/agent-interface.md`（任务生命周期）。这些实现不代表已有一键解绑命令。
