远程接入手册

从本地设备安全连上云端 Mac

先判断任务需要命令行、图形桌面还是无人值守执行,再按对应路径核验凭据、工具链与权限。VMRunner 交付的是独享 Apple Silicon 物理节点,非虚拟机;连接信息以控制台内已交付订单为准。

接入路径
3 类
交付形态
独享物理节点
运行安排
全年 365 天
CONNECTION RUN SHEET

接入节拍仪

节点已交付后执行
01
SSH 管理 仓库、构建、日志
首选
02
图形桌面 Xcode、素材、交互调试
按需
03
CI Runner 测试、签名、产物回传
持续
凭据隔离 通过
主机指纹 待本地核验
首个构建 由小任务开始

不要把同一组凭据同时交给个人会话与自动化任务。先建立可撤销的专用账号,再接入 Runner。

选择接入方式

先按操作类型分流,不要默认打开图形桌面

命令行适合高频、可脚本化操作;图形会话留给必须交互的工具;持续任务交给独立 Runner。分流后,权限边界更清楚,连接问题也更容易定位。

命令行管理

适合 Git 操作、依赖安装、日志检查、脚本执行与构建任务。带宽占用较低,连接中断后也更容易恢复。

  • 典型入口SSH
  • 适合任务构建与运维
  • 权限建议密钥登录

图形桌面操作

适合 Xcode 界面调试、模拟器检查、音视频项目处理和必须观察窗口状态的任务。分辨率越高,对本地网络要求越高。

  • 典型入口远程桌面
  • 适合任务交互式工具
  • 权限建议独立会话账号

CI 自动执行

适合测试、归档、签名与产物回传。Runner 使用专用账号运行,环境变量按任务注入,不与个人桌面会话共用凭据。

  • 典型入口自托管 Runner
  • 适合任务持续流水线
  • 权限建议最小权限
连接前检查

先把交付信息和本地基线记清楚

排查远程连接时,最常见的时间浪费不是复杂故障,而是节点地址、账号用途或本地网络基线不明确。第一次连接前完成以下记录,后续才能判断变化发生在哪一层。

需要保留的交付记录

订单标识、节点城市、节点地址、账号用途、主机指纹核验结果和首次成功连接时间。私钥只保存在受控设备,不写入工单、聊天记录或代码仓库。

  1. 01

    确认订单已交付

    在控制台检查订单状态与连接信息。未完成交付前,不根据旧地址或他人记录尝试连接。

  2. 02

    保存节点地址与独立凭据

    个人操作、自动化任务和临时协作分别使用可撤销的账号或密钥,不共享一组长期凭据。

  3. 03

    测量本地网络基线

    记录有线与无线网络下的延迟、丢包和稳定性。图形会话卡顿时,先与这份基线比较。

  4. 04

    规划账号权限

    开发账号只获得工作目录所需权限;Runner 账号只访问构建目录、缓存和必要的签名资源。

SSH 路径

先验主机身份,再让密钥接管日常连接

首次连接的目标不是尽快跳过警告,而是确认当前地址确实对应已交付节点。指纹核验完成后,再建立别名、保持策略和最小权限账号。

STEP 01

核验主机指纹

ssh-keyscan -t ed25519 NODE_ADDRESS
ssh USER@NODE_ADDRESS

把首次读取的指纹与控制台交付信息核对。地址变更或系统重装后若指纹变化,先确认原因,不直接清空本地记录继续连接。

STEP 02

生成并部署专用密钥

ssh-keygen -t ed25519 -a 64
ssh-copy-id USER@NODE_ADDRESS

为 VMRunner 节点单独生成密钥。私钥设置本地口令,不提交到仓库,也不与 Runner 的部署密钥混用。

STEP 03

配置别名与连接保持

Host vmrunner-build
  HostName NODE_ADDRESS
  User ACCOUNT_NAME
  IdentityFile ~/.ssh/vmrunner_ed25519
  ServerAliveInterval 30
  ServerAliveCountMax 3

别名减少地址抄写错误。保持参数只负责检测失联,不会让已经中断的进程自动恢复;长任务应交给任务管理器或 CI Runner。

最小权限边界

不要把管理员权限设为日常默认。依赖安装、系统配置和流水线执行应区分账号;临时提权完成后立即回到普通权限,并记录改动内容。

图形会话

把画面质量调到任务刚好需要的程度

远程桌面适合必须查看 Xcode、模拟器或时间线界面的操作,不应代替所有后台任务。先从较低分辨率建立稳定会话,再逐步提高画质。

  • 在已交付节点上确认图形远程服务已启用,并限制允许登录的账号。
  • 先使用单显示器与较低分辨率测试,确认输入和画面稳定后再提高配置。
  • 核对 Command、Option、Control 与本地键盘布局,避免快捷键误触。
  • 剪贴板只传输必要文本,不复制私钥、完整令牌或证书密码。
  • 离开时锁定会话;任务结束后主动断开,不让无人使用的桌面长期保持开放。

图形会话调节顺序

从稳定开始
01 分辨率

先选能完整显示工具窗口的最低档,观察输入延迟和画面刷新。

02 色彩与动画

网络波动时降低视觉效果,把带宽优先留给操作反馈和文件同步。

03 键盘映射

用无风险文本窗口测试常用快捷键,再进入签名、删除或发布操作。

04 会话锁定

中断后先确认旧会话状态,避免重复启动工具和占用同一工作目录。

迁移路径

从本地 Mac 到云端 Mac,分三次验证

不要一次搬走所有代码、证书、缓存和流水线。每一步都保留可验证输出,上一阶段通过后再进入下一阶段。

01 · DATA

数据同步

先同步仓库、锁文件、必要素材和构建脚本。大型缓存与可重新下载的依赖不作为首轮迁移对象。

  • 校验默认分支与提交哈希
  • 记录依赖锁文件版本
  • 对关键素材执行校验和比对
输出:可在云端复现的代码基线
02 · TOOLCHAIN

工具链安装

核对 Xcode、命令行工具、包管理器、证书与描述文件。先执行小型测试目标,不直接运行完整发布流水线。

  • 固定 Xcode 与 SDK 版本
  • 确认命令行工具选择路径
  • 分离依赖缓存与构建目录
输出:通过测试构建的环境清单
03 · RUNNER

CI 接入

创建专用 Runner 账号,限制环境变量读取范围,执行一次可回滚的测试任务并回传产物。

  • 为 Runner 建立独立工作目录
  • 只注入当前任务所需变量
  • 核对日志、退出码与产物哈希
输出:可审计的首条云端流水线
环境核对

把开发环境写成清单,而不是凭记忆还原

同一份代码在两台 Mac 上表现不同,通常来自工具版本、路径、缓存或权限差异。以下项目应在首个正式构建前逐项记录。

核对项 验证方式 通过标准
Xcode 与 SDK xcodebuild -version 版本与项目基线一致
命令行工具 xcode-select -p 路径指向目标 Xcode
证书与描述文件 执行脱敏后的签名检查 目标名称与有效范围一致
包管理器 记录版本与锁文件状态 依赖可重复安装
缓存目录 检查所有者、容量与清理规则 个人任务与 CI 相互隔离
构建目录 执行一次清理后测试构建 产物路径和权限明确
CI 接入

让自动化任务拥有自己的身份和工作目录

Runner 不应复用开发者的桌面账号。独立身份便于撤销权限、清理缓存、定位文件所有者问题,也能减少个人会话对流水线的干扰。

查看 CI 故障排查
  1. 01

    创建专用账号

    账号只访问仓库工作区、依赖缓存、构建目录和必要的签名资源,不授予日常管理员权限。

  2. 02

    注册 Runner

    使用流水线平台提供的注册流程绑定当前节点,给 Runner 设置能识别芯片、系统与任务类型的标签。

  3. 03

    注入受控变量

    变量按仓库、环境和任务范围配置。日志中隐藏敏感值,不把完整配置文件直接输出到构建记录。

  4. 04

    执行测试构建

    从依赖少、耗时短的目标开始,核对退出码、测试结果、缓存命中和工作目录清理情况。

  5. 05

    回传并核验产物

    记录产物名称、生成提交、校验和与保存位置。确认回传成功后,再扩大到完整流水线。

安全收尾

连接成功不等于迁移完成

正式投入使用前,再检查一次凭据、共享范围、备份和恢复信息。这里的目标是确保任何账号、会话或自动化任务都可以被单独撤销。

A

轮换初始凭据

首次验证完成后更换初始密码或密钥,删除不再需要的临时授权,并记录凭据用途与负责人。

B

限制共享账号

每位使用者和每个 Runner 使用独立身份。权限变化时只撤销对应账号,不影响其他工作负载。

C

备份重要数据

代码以远端仓库为主,签名材料、项目素材和关键产物按团队策略备份,并定期验证恢复流程。

D

断开闲置会话

锁定并关闭不再使用的图形会话,停止临时服务,检查后台任务是否仍有明确所有者。

E

保存恢复信息

记录订单标识、节点城市、账号用途、工具版本和最近一次可用构建,以便支持人员快速定位问题。

需要支持时,请准备可复现信息

提交订单标识、节点城市、发生时间、复现步骤、脱敏日志和预期结果。不要发送私钥、完整访问令牌、证书密码或未经脱敏的配置文件。

准备开始

选择节点后,用一条小型构建验证整条连接链路

先完成凭据核验、工具版本记录和测试产物回传,再把正式项目迁入独享 Apple Silicon 物理节点。