采集并核对主机指纹
首次连接前先采集 ED25519 主机公钥,计算指纹后与交付资料核对。不要在未核对时直接忽略警告。
三种方式可以并存。日常自动化优先 SSH 或 Runner;只有需要查看 Xcode 界面、调整系统设置或处理图形化诊断时,才打开屏幕共享。
用于拉取仓库、安装依赖、运行测试、执行 Xcode 命令行构建、查看日志、同步产物与检查磁盘。稳定脚本应使用密钥认证,并把节点别名写入本地 SSH 配置。
用于查看 Xcode 工程、处理图形化调试、检查钥匙串访问权限、调整显示设置与确认归档结果。结束工作时应锁定会话,不要把敏感信息留在桌面或剪贴板中。
将节点注册到现有 CI 系统后,可以按仓库、分支或任务类型分配标签。Runner 使用独立工作目录与受限令牌,缓存和构建产物应设置明确的清理规则。
连接失败经常不是主机故障,而是节点地址、用户名、网络策略或订单状态没有对齐。按下面顺序检查,可以避免反复试错。
登录控制台查看实例是否已交付,并确认当前订单对应的机型、节点和租用周期。连接资料应与该实例逐项对应。
复制控制台提供的主机地址,不要从旧工单、旧脚本或团队聊天记录中沿用地址。多节点团队应给地址增加用途标签。
SSH 用户名与图形会话用户名可能用于不同入口。不要猜测默认用户名,也不要在脚本中硬编码临时密码。
临时凭据只用于首次进入。成功登录后立即更新,并把新凭据保存在团队批准的密码管理流程中。
确认当前网络允许目标端口出站。企业网络、代理与安全软件可能限制 SSH 或图形连接,应先与网络管理员核对。
登记节点、用途、负责人、主机指纹和凭据轮换时间。首次连接后不要忽略主机指纹变化警告。
以下命令使用示例变量,不包含真实节点地址或凭据。把示例变量替换为控制台提供的信息,并在可信网络环境中执行。
首次连接前先采集 ED25519 主机公钥,计算指纹后与交付资料核对。不要在未核对时直接忽略警告。
为 ZoneMini 节点创建单独的密钥对。私钥保留在本地受控设备上,公钥再写入远端授权列表。
在 SSH 配置中保存主机地址、用户名、密钥路径与会话保持参数,避免每次手工输入和混用不同节点。
确认密钥登录成功,再更新临时凭据。不要在密钥尚未验证时删除唯一可用的登录方式。
ssh-keyscan -t ed25519 <node-address> > zonemini_hostkey
ssh-keygen -lf zonemini_hostkey
ssh-keygen -t ed25519 -f ~/.ssh/zonemini_ed25519
ssh-copy-id -i ~/.ssh/zonemini_ed25519.pub <user>@<node-address>
ssh -i ~/.ssh/zonemini_ed25519 <user>@<node-address>
Host zonemini-build
HostName <node-address>
User <user>
IdentityFile ~/.ssh/zonemini_ed25519
ServerAliveInterval 30
ServerAliveCountMax 3
屏幕共享适合 Xcode 图形化调试、系统设置核对和归档检查。构建脚本、日志收集与批处理仍建议通过 SSH 完成。
在 macOS Finder 中选择“前往”与“连接服务器”,输入交付资料对应的服务器地址,再使用授权用户名和凭据进入会话。
vnc://<node-address>
使用 Finder 的连接服务器入口,不要通过来历不明的快捷方式保存凭据。
核对用户名与节点地址后输入凭据。多人协作时不要共用同一组长期登录信息。
网络波动时先降低分辨率或颜色质量。高分辨率桌面会增加传输量和输入延迟。
不要复制私钥、完整令牌或明文密码。跨会话粘贴前先确认目标窗口和当前用户。
关闭客户端不一定等于退出桌面。完成工作后锁定会话,并关闭不再需要的敏感窗口。
Windows 或 Linux 工作站需要准备兼容的图形连接工具。不同客户端在快捷键、剪贴板、色彩、缩放和多显示器支持上可能存在差异,应先用非敏感任务验证。
选择支持目标连接协议、加密传输和自定义分辨率的客户端。安装来源应经过团队审核,并保持版本更新。
先验证 DNS、路由和目标端口,再测试图形会话。公司代理、出口防火墙与无线网络切换都可能造成会话中断。
先用单显示器和中等分辨率完成验证,再逐步增加画面尺寸。黑屏或画面裁切时,回到较低分辨率重新建立会话。
能稳定输入、清晰阅读日志、正确映射常用快捷键,并能安全结束会话,才适合纳入日常流程。若任务完全可以脚本化,优先使用 SSH 或 CI Runner。
Runner 应使用独立账户、独立工作目录与受限令牌。先完成一条最小测试流水线,再加入签名构建、缓存与归档步骤。
将源代码、依赖缓存、构建中间文件与最终产物分开,便于设置清理策略和排查磁盘占用。
令牌只授权目标仓库与必要操作。不要复用个人访问令牌,也不要把令牌写入仓库或构建输出。
按 Xcode 版本、项目类型、机型或任务负载设置标签,避免不兼容任务被调度到错误环境。
先运行依赖检查和单元测试,再执行归档。失败时保留必要日志,不要无条件上传整个用户目录。
确认产物已进入目标存储后,删除临时凭据、临时钥匙串、过期缓存和不再需要的构建目录。
set -euo pipefail
WORK_DIR="$HOME/ci-work/project"
RESULT_DIR="$HOME/ci-results"
mkdir -p "$WORK_DIR" "$RESULT_DIR"
cd "$WORK_DIR"
git fetch --prune
git checkout "$CI_COMMIT_REF"
xcodebuild \
-scheme "$CI_SCHEME" \
-destination "generic/platform=iOS" \
test
xcodebuild \
-scheme "$CI_SCHEME" \
-archivePath "$RESULT_DIR/App.xcarchive" \
archive
find "$WORK_DIR" -name "*.tmp" -delete
权限应有负责人、用途和到期时间。长期无人维护的共享账户、仓库令牌和临时文件,会让固定构建环境逐渐失去可审计性。
每位维护者使用独立密钥。成员离开项目时移除对应公钥,不影响其他人的访问。
需要共享环境时,也应区分个人登录与自动化账户。不要让 Runner 使用管理员日常账户。
为仓库令牌、Runner 注册令牌和临时访问凭据设置轮换记录,失效令牌及时删除。
构建任务只获取所需仓库和分支权限。上传产物与读取源码可以使用不同凭据。
离开桌面前锁定会话,关闭包含敏感内容的窗口,并清空不再需要的剪贴板内容。
任务结束后删除临时私钥、一次性令牌、临时钥匙串和不再使用的授权文件。
不要连续更换密码、地址和客户端碰运气。先记录错误类型、发生时间、本地网络、节点与入口,再执行对应检查。
| 现象 | 先检查 | 可执行动作 | 提交支持时附带 |
|---|---|---|---|
| 连接超时 | 节点地址、本地网络、出口规则、目标端口 | 切换可信网络;测试端口连通性;确认未使用旧地址 | 发生时间、节点、客户端网络类型、脱敏探测结果 |
| 认证失败 | 用户名、密钥路径、文件权限、凭据是否更新 | 使用详细 SSH 日志定位选中的密钥;核对授权公钥 | 错误行、用户名、密钥指纹,不附私钥或完整密码 |
| 主机指纹变化 | 是否更换节点地址、重建实例或修改本地别名 | 停止连接;从控制台重新核对指纹;确认后再更新记录 | 节点、旧指纹、新指纹和首次发现时间 |
| 图形会话黑屏 | 会话是否已锁定、显示分辨率、客户端兼容性 | 降低分辨率;重新建立会话;通过 SSH 检查系统状态 | 客户端系统、客户端版本、显示设置与脱敏截图 |
| 分辨率异常 | 客户端缩放、多显示器模式、窗口尺寸 | 退回单显示器与中等分辨率,再逐项恢复设置 | 期望分辨率、实际分辨率、缩放比例与客户端类型 |
| 会话频繁中断 | 无线网络切换、代理、空闲策略、链路抖动 | 使用稳定网络;为 SSH 设置保活;把长任务放入持久会话 | 中断频率、持续时间、网络变化与相关日志片段 |
nc -vz <node-address> 22
route -n get <node-address>
ssh -vvv zonemini-build 2>&1 | tee ssh-debug.log
请提供订单编号、ZoneMini M4 Core / ZoneMini M4 Plus / ZoneMini M4 Pro 其中一档、节点、发生时间、连接方式、复现步骤、期望结果和脱敏日志。不要上传证书私钥、仓库令牌或完整密码。