SSH:构建、脚本与 runner 的首选
适合执行 Git、Xcode 命令行工具、Fastlane、依赖安装、日志采集和 self-hosted runner 任务。连接前准备本地 SSH 客户端、受保护的私钥、节点主机名、端口、用户名和可信主机指纹。
- 私钥文件仅对当前用户可读
- 本地网络允许访问订单返回的端口
- 首次连接前通过独立渠道核对指纹
- 自动化任务使用单独密钥并限制用途
SSH 负责命令行、自动化与构建任务,VNC 负责图形桌面操作。先核对节点信息和主机指纹,再建立会话、验证工具链并记录结果。
不要从聊天记录或不明来源复制主机指纹。以控制台当前订单返回的信息为准。
两种方式连接同一台独享物理 Mac,但承担的任务不同。自动化流程优先使用 SSH;需要检查图形界面、分辨率或桌面应用时使用 VNC。
适合执行 Git、Xcode 命令行工具、Fastlane、依赖安装、日志采集和 self-hosted runner 任务。连接前准备本地 SSH 客户端、受保护的私钥、节点主机名、端口、用户名和可信主机指纹。
适合操作 macOS 图形界面、检查键盘布局、确认分辨率和验证需要桌面会话的任务。连接前准备可信的 VNC 客户端、节点地址、临时凭据和明确的剪贴板策略。
不要跳过主机指纹核验。连接成功只说明链路可达,工具链、目录权限和退出流程仍需分别确认。
在控制台打开当前订单,记录主机名、连接端口、用户名、临时凭据或密钥说明,以及系统返回的主机指纹。
验收:字段来自同一订单,节点与租期一致首次 SSH 连接显示指纹时,逐段与控制台信息比对。若不一致,停止连接,不要通过忽略警告或清空记录绕过。
验收:算法与指纹文本完全一致完成首次登录后,按交付说明修改临时凭据,登记自己的公钥,并移除不再需要的临时访问材料。
验收:新会话可用,旧临时材料不再使用执行系统版本、Xcode 版本、磁盘空间和工作目录写入检查,再运行一个可重复的小型构建任务并正常退出。
验收:连接、工具链、写入、任务和退出均有结果以下主机名、用户名和任务名称均为示例。实际连接参数只从控制台读取,不要把生产凭据写进脚本、构建日志或工单。
$ ssh -p 22022 developer@host.example
The authenticity of host cannot be established.
ED25519 key fingerprint is SHA256:<compare-with-console>
Are you sure you want to continue connecting (yes/no)? yes
Last login: current session
developer@cloud-mac % xcodebuild -version
Xcode 16.x
Build version 16X000
developer@cloud-mac % fastlane test
[✓] Preparing build environment
[✓] Resolving project dependencies
[✓] Test task completed
developer@cloud-mac % exit
Connection to host.example closed.
首次进入图形桌面后,用固定顺序检查显示、输入、数据交换和会话恢复。每项都应能在断开并重新连接后复现。
选择能够完整显示工具栏和对话框的分辨率。不要只看桌面是否清晰,还要打开实际开发工具检查文本、侧栏和弹窗是否被裁切。
在普通文本框中验证字母、数字、符号和常用快捷键。若本地与远端布局不同,先统一布局,再开始编辑代码或输入命令。
只在任务确有需要时启用剪贴板同步。不要复制私钥、令牌或完整环境变量;共享设备上应关闭双向同步并清空历史记录。
确认离开设备后桌面会进入锁定状态。团队共用终端设备时,结束操作后主动锁定,不依赖网络断开代替会话保护。
主动断开一次并重新连接,确认会话状态符合预期。对长时间构建任务,使用能与交互连接分离的任务管理方式。
退出后删除保存的主机记录、缓存凭据和临时下载文件。浏览器、VNC 客户端与密码管理工具都要分别检查。
本地端口转发可以让本机工具通过 SSH 会话访问远端服务,无需把服务监听地址暴露给更大网络。端口、目标地址和持续时间都应有明确边界。
ssh \
-L 127.0.0.1:9000:127.0.0.1:9000 \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
-p 22022 \
developer@host.example
接入 GitLab CI 等系统时,不要直接迁移完整生产流程。先注册 runner、固定标签、验证目录权限,再执行无敏感数据的小型测试任务。
使用单独的服务身份完成注册,记录 runner 名称、执行器、工作目录和归属项目。注册令牌只在必要步骤中使用,不写入仓库。
结果:runner 在线标签描述真实能力,例如 macOS、arm64 和项目用途。避免使用含义宽泛的默认标签,防止不相干任务被调度到该节点。
结果:任务可精确匹配检查克隆、缓存、构建产物和临时目录的读写权限。任务身份不应获得超出工作目录所需的系统权限。
结果:目录读写受控首轮只执行环境输出、依赖解析和小型测试。确认退出码、日志完整性、缓存路径和失败时的清理行为。
结果:任务可重复执行| 检查项 | 执行方式 | 通过条件 | 失败时先查 |
|---|---|---|---|
| 架构与系统 | uname -m | 输出与任务标签一致 | runner 标签与执行节点 |
| Xcode 工具链 | xcodebuild -version | 版本可读取,命令退出码为 0 | 命令路径与任务环境 |
| 工作目录 | 创建、读取并删除测试文件 | 仅目标目录可按需读写 | 目录所有者与权限 |
| 缓存行为 | 连续执行两次相同测试 | 缓存命中可解释且不串项目 | 缓存键与清理策略 |
一次只验证一个变量。不要同时更换主机名、端口、密钥和网络,否则即使恢复连接,也无法确认根因。
确认使用控制台当前返回的主机名,并检查解析结果是否稳定。不要从旧工单或历史脚本复制地址。
核对端口数字和协议,测试本地到目标端口是否可达。若公司网络有限制,使用另一条受信网络交叉验证。
确认客户端实际加载的密钥文件、文件权限和对应公钥。开启详细日志时先脱敏,再检查认证顺序。
指纹变化时先停止连接并重新核对节点信息。不要直接删除已知主机记录后继续登录。
检查是否存在未退出的桌面会话、长任务或本地端口转发。先确认任务状态,再决定是否结束进程。
最后检查代理、防火墙、VPN、无线网络质量和出口策略。用受信的替代网络复测,以区分本地链路与节点问题。
断开远程窗口不是完整离场。需要退出会话、撤销访问材料、清理敏感文件、确认备份,并核对订单租期。
结束 SSH、VNC、本地端口转发和 runner 交互会话,确认没有遗留的测试进程或后台监听端口。
移除临时公钥、测试 runner 凭据和一次性访问材料;保留项应有明确所有者和后续用途。
检查 shell 历史、临时目录、构建日志、下载目录、剪贴板历史和工作区中的配置文件,删除不应继续保留的内容。
确认代码和必要产物已迁出,并在独立位置完成一次读取验证。不要把节点上的单份文件当作备份。
在控制台确认到期时间、续租状态和服务记录。需要继续使用时,先确认租期再安排后续构建任务。
三档在售配置覆盖命令行构建、图形桌面、CI/CD runner 与并行任务。实际可用状态以控制台实时返回为准。