先说场景:你有没有这样一队 Windows 机器?
零售店的 kiosk 机、办公室的工控机、机房里跑着老业务的服务器、散在各个办公室的员工机——它们有几个共同点:
- 你需要时不时对它们做点什么:执行个命令、传个文件、重启个服务、看看屏幕、打个补丁
- 它们大多在内网/NAT 后面,你人不在旁边
- 远程桌面一台台点太慢,TeamViewer/AnyDesk 检测商用,PowerShell Remoting 要开端口配防火墙
- 机器一多,"哪台是什么配置、上次改了什么"就开始失控
我管着这样一队机器。从今年 7 月起写了一个开源工具来解决这件事,写了四个月,现在放出来:Reins(MIT,Go 实现,无 Pro 版无企业版)。
Reins 是什么:三个组件,一张图
text
你的电脑(CLI,50+ 命令) ──HTTPS──► Relay(单个 Go 二进制,放任意一台机器)
▲
│ 反向 WebSocket(被控机主动连出来,穿 NAT)
┌───────────────────────────┼───────────────────────────┐
Windows 机器 A Windows 机器 B Linux 机器 C
(Agent,系统服务) (Agent,系统服务) (Agent)
三个角色:
- Relay:服务端,一个静态 Go 二进制,
./reins-relay直接跑(bbolt 内嵌持久化,零外部依赖;要横向扩展可接 Redis)。自带 Web 控制台。 - Agent:装在被控机上,注册为原生 Windows 服务(开机自启、崩溃自动重启)。关键特性:只有出站连接——被控机不需要开任何入站端口,家庭网络/公司 NAT/云内网直接穿透。
- CLI:你手上的操作端,50+ 命令覆盖诊断/执行/传输/部署/监控/守护。
Windows 能力清单(重点)
Reins 从 Windows 运维场景里长出来,Windows 是一等公民。以下是它能对 Windows 机器做的事,每条配真实命令:
1. 远程执行 PowerShell
bash
# 单机执行
reins task run -a kiosk-01 -c "Get-Service MyAppService | Select Status"
# 结果实时回流:成功/退出码/耗时/stdout
# 复杂命令写本地 .ps1,一步上传+执行(自动加 BOM,规避中文乱码)
reins task run -a kiosk-01 -t script -s fix.ps1
# 多机并行
reins exec -a kiosk-01,kiosk-02,kiosk-03 -c "hostname"
输出防乱码(UTF-16LE EncodedCommand + 编码修复),中文环境实测可用。
2. 交互式 Shell(全程录屏)
bash
reins shell open -a kiosk-01 # 终端里直接开远程 PowerShell 会话
每个会话自动录制(asciinema v2 格式,可回放)——出事后能回看当时敲了什么。
3. 服务与进程管控
bash
reins service list -a kiosk-01 # 列服务
reins task run -a kiosk-01 -c "Restart-Service MyApp"
reins proc list -a kiosk-01 # 进程列表(按 CPU 排)
reins power restart -a kiosk-01 # 电源操作(标签白名单+审计)
一个工程细节:超时杀进程用的是 Job Object——不只杀子进程,连孙进程一起终止。真实事故的教训:PowerShell 起的 uvicorn 崩了变僵尸占着 8090 端口,健康检查打到旧进程上假通过。
4. 计划任务管理
对 Register-ScheduledTask 全流程支持(含 -LogonType Interactive 落桌面会话的正确姿势——这类"正解写在门禁规则里"的坑后面单开一篇讲)。
5. 屏幕截图(远程"看一眼")
bash
reins task run -a kiosk-01 -t screenshot ...
PrintWindow 定窗捕获——远程 UI 的目视核验,不用开远程桌面。
6. GUI 自动化(视觉定位 + 点击)
视觉模型定位屏幕元素 + SendInput 点击,适合老旧桌面程序没有 CLI 接口的场景。仅限授权部署,全程录屏+审计——这三点是硬约束,不是可选配置。
7. 浏览器自动化
chromedp 驱动的远端浏览器控制:登录流程、网页检查、自动化表单。
8. 文件传输(大文件不怕断)
bash
reins file upload -a kiosk-01 app.zip "C:\apps\app.zip"
reins file download -a kiosk-01 "C:\logs\app.log" .
reins sync push -a kiosk-01 ./dist "C:\apps\app" -j 4 # 目录级同步,并行
并发分片 + 断点续传 + per-chunk SHA256 校验(损坏当场重传,不留隐患)+ 内网直连优先(同网段千兆线速,Relay 只做授权)。
9. 监控与诊断
bash
reins sysinfo -a kiosk-01 # CPU/内存/磁盘/系统
reins monitor top -a kiosk-01 # glances 风格 TUI 实时监控(含 GPU)
reins net ports -a kiosk-01 # 端口占用
reins logs tail -a kiosk-01 "C:\logs\app.log" # 远程日志实时 tail
reins snapshot diff -a kiosk-01 # 系统状态快照对比(改了什么一眼看出)
10. 自更新(不停机换自己)
Agent 能在线更新自己:两步 rename 换 exe + 服务控制管理器重启,健康自检失败自动回滚。跨 NAT 给 50 台机器推新版本,一条命令。
11. 一行安装
powershell
# 在目标 Windows 机器上,就这一行:
iex (((irm 'http://your-relay:7780/install.ps1') -replace '^\uFEFF'))
# 自动 UAC 提权、Token 探测、装完确认上线,目标机零预置
不只是单机:舰队级玩法
bash
# 按标签批量分发(自动重试+实时进度)
reins batch start --tag env=prod -c "Get-Date" --retries 2
# DAG 编排:备份→升级→健康检查,失败整枝跳过(不会"半升级"继续跑)
reins dag apply -f upgrade-flow.json
安全模型(为什么敢放在公网)
- 被控机零入站端口:Agent 只有出站连接,机器可以对互联网完全不可达
- 一机一证:mTLS + 内置 CA,每台 Agent 一个客户端证书,CRL 吊销即断链
- 多租户 RBAC:
tenant:role:secret三段式 token,admin/operator/viewer 三角色 - 防篡改审计:hash chain 审计日志(改不了历史),可导出 CEF/Syslog 给 SIEM
- 双侧命令策略:高危命令黑名单在 Relay 和 Agent 各校验一次,离线缓存任务也不能绕过
Linux 也行(85%)
同一套 CLI 方言化到 Linux:sysinfo 走 /proc、service list 走 systemctl、脚本走 sh——已在 Ubuntu 24.04/WSL2 实测全链路。CLI 会按目标 Agent 的 OS 自动选方言(这个自动选择还有个小故事,后来修成了 v4.9.1)。
还有一个特别的设计:给 AI 代理上缰绳
现在大家开始让 AI 代理跑运维了。Reins 的做法:被管项目在仓库根放一个 .reins/rules.md 写运维规则("勿营业时段杀壳进程"这类),AI 必须先读规则、拿到内容指纹 ack,才能执行变更任务;规则一改,旧 ack 立即失效。配套 MCP Server,Claude/Cursor 可以原生调用 14 个运维工具——但门禁在执行层,换任何客户端都是同一道闸。
这个设计值得单开一篇,下一篇展开:《规则门禁:用内容指纹 ack 约束 AI 运维代理的执行层设计》。
诚实边界
- Windows 一等公民;Linux 覆盖 script/monitor + 15 组方言化命令(约 85%)
- 单 Relay 是默认形态(Redis 水平扩展接口已留,生产化进行中)
- 远程运维 Agent 被少量杀毒引擎报毒是品类常态(MeshCentral 签名版也被报过)——判定标准和处置方法在 docs/antivirus.md,每个 Release 附 SHA256 清单
快速开始(4 行)
bash
git clone https://github.com/V-T-V/reins && cd reins
echo "REINS_TOKEN=change-me" > .env && docker compose up -d
# Windows 被控机:iex (irm 'http://your-server:7780/install.ps1')
# 你的电脑:reins --relay http://your-server:7780 --token change-me agent list
Windows 用户也可以 scoop bucket add reins https://github.com/V-T-V/scoop-reins && scoop install reins;macOS/Linux 有 Homebrew tap。规模:256 个 Go 文件 / 48.9K 行 / 569 测试(CI 带 race)/ 每次发布附 SBOM。
项目地址:github.com/V-T-V/reins · 60 秒 demo:v-t-v.github.io/reins · 欢迎 ISSUE/PR,24h 内必回。