重要资料已经整理在家中的 Windows 电脑上,人却离开了电脑。此时如果只是想启动一次预先设定好的备份,使用完整远程桌面显得有些重;直接把 PowerShell 或系统命令开放给手机,风险又太高。
这次做一个用途单一的任务页面:Windows 只允许执行一项固定操作——把专用测试目录打包成 ZIP,再写入飞牛 NAS。Android 手机关闭 Wi-Fi、使用 5G,通过星空组网地址打开任务页面,点击一次按钮即可启动备份。
整个过程不需要公网 IP,不开放路由器端口,也不允许手机输入路径或执行任意命令。
一、星空组网解决哪一段问题
本次使用的设备如下:
| 设备 | 实操中的作用 |
|---|---|
| Windows 电脑 | 保存测试源文件,运行 Python 固定备份任务 |
| 飞牛 OS 虚拟机 | 通过 SMB 保存备份压缩包,局域网 IP 为192.168.71.128 |
| Android 手机 | 关闭 Wi-Fi,使用 5G远程启动任务 |
实际路径为:
Android 手机(5G,192.168.188.3) ↓ 星空组网设备直连 Windows(192.168.188.1:18092) ↓ 执行固定 Python 备份任务 飞牛 SMB:\\192.168.71.128\Remote-Backup-Target这里使用的是星空组网的设备直接组网能力,不是子网路由。星空组网负责让 5G 手机抵达 Windows 的私有任务入口;Python 程序负责打包;Windows 再通过本地 SMB 将结果写入飞牛。
二、注册账号并确认两端组网地址
先在星空组网登录页面点击“免费注册账号”完成注册,再让 Windows 和 Android 手机加入同一网络。
图 1 星空组网登录页面提供免费注册入口,注册后将 Windows 和手机接入同一网络
本次 Windows 获得的组网地址为:
192.168.188.1手机关闭 Wi-Fi、保持 5G 后,星空组网页面显示其组网地址为:
192.168.188.3*图 2 Android 手机使用 5G 并接入星空组网,获得私有组网地址 **192.168.188.3*
这些地址来自本次实际环境,复现时应使用各自客户端显示的地址,不能直接照搬。
三、准备不会影响真实资料的测试目录
Windows 中建立固定源目录:
D:\codex\remote-backup-demo\source目录中只放两份无隐私测试文件:
项目说明.txt 待归档清单.txt飞牛“我的文件”中新建:
Remote-Backup-Target进入“文件共享协议 → SMB”,把可见范围设为“自定义文件夹”,只选择Remote-Backup-Target。Windows 随后通过下面的地址打开目标目录:
\\192.168.71.128\Remote-Backup-Target图 3 Windows 通过飞牛原局域网 IP 看到专用备份目标,执行任务前目录保持为空
这种准备方式有两个好处:测试任务不会读取现有文档,也不会把备份结果写入其他 NAS 目录。
四、创建只能执行固定备份的任务页面
项目只包含两个程序文件:
remote-backup-demo/ ├─ server.py ├─ index.html └─ source/ ├─ 项目说明.txt └─ 待归档清单.txtserver.py使用 Windows 已安装的 Python 标准库,不需要额外安装第三方包。程序中的源目录和目标目录是固定值:
SOURCE = Path(r"D:\codex\remote-backup-demo\source") TARGET = Path(r"\\192.168.71.128\Remote-Backup-Target")备份核心逻辑只做四件事:读取固定源目录、生成时间戳 ZIP、先复制为临时文件、完成后再改成正式文件名。
def run_backup(): files = [ path for path in SOURCE.rglob("*") if path.is_file() and not path.is_symlink() ] if not files: raise RuntimeError("测试源目录中没有可备份文件。") if not TARGET.is_dir(): raise RuntimeError("飞牛目标目录不可用。") stamp = datetime.now().strftime("%Y%m%d-%H%M%S") archive_name = f"windows-test-backup-{stamp}.zip" with tempfile.TemporaryDirectory(prefix="remote-backup-") as temp_dir: local_zip = Path(temp_dir) / archive_name with zipfile.ZipFile( local_zip, "w", compression=zipfile.ZIP_DEFLATED ) as bundle: for path in files: bundle.write(path, path.relative_to(SOURCE)) remote_part = TARGET / f".{archive_name}.part" remote_final = TARGET / archive_name shutil.copy2(local_zip, remote_part) os.replace(remote_part, remote_final)网页只调用固定的/api/start接口,不提交路径、文件名或系统命令。服务端还会检查来源 IP,只允许本次手机的组网地址访问:
if self.client_address[0] != self.server.allowed_client: self.reply(403, {"error": "当前设备未获准访问测试任务。"}) return False完整实操文件保存在:
- [server.py](D:/codex/remote-backup-demo/server.py)
- [index.html](D:/codex/remote-backup-demo/index.html)
页面显示任务状态、压缩包名称、文件数量、源文件大小和完成时间。即使能够打开页面,也不能借此执行任意 PowerShell 命令。
五、绑定组网地址并由手机启动
先检查 Python 语法:
python -m py_compile D:\codex\remote-backup-demo\server.py确认18092端口未被占用后,在 Windows 运行:
python D:\codex\remote-backup-demo\server.py --bind 192.168.188.1 --allow-client 192.168.188.3 --port 18092其中:
--bind是 Windows 的星空组网地址;--allow-client是允许访问的手机组网地址;- 服务只监听
192.168.188.1:18092,没有绑定0.0.0.0。
手机保持 Wi-Fi 关闭,在浏览器中打开:
http://192.168.188.1:18092点击“开始测试备份”后,页面显示任务完成,并返回实际生成的压缩包、文件数量和时间。
图 4 手机通过 5G 和星空组网启动固定任务,Windows 已将 2 个测试文件打包并写入飞牛
本次生成的文件为:
windows-test-backup-20260928-085116.zip页面显示源文件共 2 个、230 B,完成时间为2026-09-28 08:51:16。
六、不能只相信网页提示
任务页面显示“完成”只能证明服务端返回了成功状态,还需要检查飞牛中是否真的出现结果。
在飞牛文件管理中打开Remote-Backup-Target,可以看到原始 ZIP 文件;解压后出现:
待归档清单.txt 项目说明.txt图 5 飞牛中同时保留备份 ZIP 和解压后的两份测试文件,证明任务确实执行并写入 NAS
随后按Ctrl+C停止临时服务,再检查18092已无监听记录。Windows 源目录中的两份文件仍然存在,飞牛中只新增一个带时间戳的备份包,任务没有删除或覆盖任何源文件。
七、总结
这次实操解决的是一个明确问题:人已经离开 Windows 电脑,但需要立即启动一项预先设定好的备份任务。
星空组网让 5G 手机能够访问 Windows 的私有组网地址,不需要公网 IP 和端口映射;Python 页面把远程能力限制为一个固定任务;飞牛通过 SMB 保存最终备份结果。
真正重要的并不是“用手机执行任意命令”,而是把远程入口做得足够窄:固定源目录、固定 NAS 目标、只允许指定手机、每次生成新文件、不删除源数据。这样既能体现星空组网的设备互联能力,也避免把一个方便的按钮变成不受控制的远程命令入口。