SSH:把命令送到机器上
适合执行 xcodebuild、运行脚本、查看日志和管理构建产物。macOS 终端、Windows Terminal 中的 OpenSSH,或 Linux 的 SSH 客户端都可使用。
- 从实例详情读取 SSH 端口。22 是常见默认值,但不代表你的实例一定使用它。
- 首次连接先核验主机指纹;确认目标无误,再完成认证。
- 配置公钥登录。私钥留在本地,不放进项目仓库,也不附在工单中。
- 长任务使用你已配置的持久会话或流水线执行器,避免把本地终端在线状态当作任务保障。
连接的是一台独享物理 Mac,不是虚拟机。先在控制台的机器详情页查看 IP、连接端口和凭据;用 SSH 执行构建与测试,用 VNC 检查 macOS 图形界面。两种方式可以配合使用,不必把每次构建都放在远程桌面里操作。
已下单:先确认机器已交付,再连接。端口、用户名与认证方式均以该实例详情为准,不凭示例猜测。
先让命令行稳定连通,再打开桌面。这样能把网络与认证问题分开定位,也能避免桌面刷新占用构建日志回传所需的带宽。
适合执行 xcodebuild、运行脚本、查看日志和管理构建产物。macOS 终端、Windows Terminal 中的 OpenSSH,或 Linux 的 SSH 客户端都可使用。
适合调整工程设置、检查模拟器画面和定位仅在图形界面出现的问题。可使用 macOS 屏幕共享或 RealVNC 等兼容客户端,具体认证支持以客户端与实例设置为准。
不要把 VNC 视为接入本地 USB 设备的替代品。模拟器测试与远程桌面可直接规划;依赖外接设备的测试,先确认设备接入条件,再决定租用方式。
以下是教学记录,不是当前节点的实时运行结果。命令中的环境变量须先在本地设为实例真实值;App 是示例 scheme,执行前改成工程中实际存在的名称。
$ ssh -p "$SSH_PORT" "$MAC_USER@$MAC_IP"
The authenticity of host cannot be established.
ED25519 key fingerprint is displayed by your SSH client.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes
Authenticated using publickey.
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcrun simctl list devices available
== Devices ==
Available simulators are listed by the installed runtime.
$ xcodebuild -scheme App -destination 'platform=iOS Simulator' test
Test Suite 'AppTests' started.
Executed 128 tests, with 0 failures.
** TEST SUCCEEDED **
$ fastlane beta
Build processing completed.
Upload completed successfully.
fastlane finished successfully.
阅读顺序:确认 SSH 认证成功 → 检查工具链 → 检查模拟器 → 运行测试 → 检查打包上传结果。
示例中的 128 项通过、0 项失败仅用于说明日志读法;实际测试数量、耗时与上传结果由你的工程决定。
首次连接时,把终端显示的指纹与可信来源提供的记录核对;详情页未提供指纹时,通过控制台工单确认。后续出现主机身份变化提示,不要直接删除旧记录绕过检查,先确认是否发生过重装或实例更换。
运行测试前确认 Xcode 路径、模拟器运行时、工程依赖和共享 scheme。fastlane beta 需要项目内已有对应 lane、签名材料和上传凭据;它不是任意工程都能直接执行的通用上传命令。
可选节点为新加坡、东京、首尔、香港。来源城市与节点之间的线路,比地理距离更能影响操作反馈;同一城市的不同运营商也可能得到不同结果。
数据状态:当前未提供可核验的逐城市测量样本,表内如实标为“未采样”,不把估算范围写成实测中位数。选择前请用自己的网络测量;需要预先评估线路时,可通过邮箱或控制台工单咨询。
| 测试来源城市 | 新加坡 | 东京 | 首尔 | 香港 |
|---|---|---|---|---|
| 上海 | 未采样 | 未采样 | 未采样 | 未采样 |
| 深圳 | 未采样 | 未采样 | 未采样 | 未采样 |
| 台北 | 未采样 | 未采样 | 未采样 | 未采样 |
| 曼谷 | 未采样 | 未采样 | 未采样 | 未采样 |
| 悉尼 | 未采样 | 未采样 | 未采样 | 未采样 |
| 洛杉矶 | 未采样 | 未采样 | 未采样 | 未采样 |
macOS 或 Linux 可在本地执行下面的命令。Windows 可使用 ping -n 100 加目标 IP。记录来源运营商、时段、成功响应数与原始输出,比较时保持网络和条件一致。
ping -c 100 "$MAC_IP"
ping 汇总的平均值不是中位数,需从每次响应的原始时间计算。持续丢包或偶发高延迟会让 VNC 拖动卡顿,即使中位数不高也可能不好用。ICMP 被过滤不等于 SSH 或 VNC 不可用,应继续检查实际连接端口。
最后用同一分辨率、色深和操作序列试桌面:输入一段文字、拖动一个窗口,再观察刷新是否稳定。
先用低负载设置建立基线,再逐项提高画质。每改一项,重复输入、滚动和窗口拖动;不要同时调整四个选项,否则很难判断哪一步起作用。
客户端允许时先选 16 位色深或较低画质档,减少每次刷新传输的数据。查看设计稿、颜色或截图问题时再恢复较高画质;低色深画面不适合作为颜色验收依据。
改用静态壁纸,停止无关视频和持续动画。背景也在刷新时,带宽会被与你当前任务无关的像素占用。检查模拟器动画时,只保留需要观察的窗口。
从 1440 × 900 开始,能看清编辑器和测试窗口后再增大。不要仅因为本地显示器支持高分辨率就同步拉高远端桌面;像素增多会提高传输和解码负担。
构建、依赖安装和日志检查交给 SSH,确实需要界面时再打开 VNC。把产物与日志分开回传,避免大文件传输和桌面刷新同时争用上行链路。
独享物理机意味着环境由你管理,不意味着公网连接自动安全。任何认证或防火墙变更,都先保留一个已连通的会话,再用第二个会话验证新设置。
交付后尽快替换初始密码,使用独立、足够长的密码,不复用代码托管或邮箱密码。凭据只保存在受控的密码管理工具中,不写进构建日志与仓库。
验证:新开会话测试新凭据,确认成功后再关闭旧会话。
先安装公钥并验证私钥登录,再调整 SSH 认证策略。为自动化任务使用独立密钥,按任务分配权限;人员退出或密钥泄露时及时撤销对应公钥。
验证:第二个终端能使用指定私钥连接,不依赖旧会话。
仅保留任务需要的入口,条件允许时限制来源 IP。远程桌面优先走受保护的连接方式;SSH 与 VNC 规则分别确认,不要为排障长期关闭整套防护。
验证:所需端口可达,不需要的入口保持关闭。
结束调试时锁屏并断开客户端,清理临时下载的敏感材料。团队协作不要共用同一份私钥;构建所需的密钥和证书按团队既有流程管理。
验证:重新访问桌面时需要认证,日志与截图不含秘密。
先区分超时、拒绝连接和认证失败。一次只验证一层,保留原始错误;反复修改密码、端口和防火墙,会让最初的问题失去线索。
重新打开控制台机器详情,确认实例已交付、目标地址属于当前机器。不要使用旧笔记、截图或另一台机器的地址;也不要把示例中的变量名直接填入客户端。
SSH 客户端使用 SSH 端口,VNC 客户端使用桌面端口。“超时”优先查网络与规则;“拒绝连接”优先查端口和服务是否监听。ping 可达不代表应用端口可达。
出现认证失败时检查用户名、密钥文件及客户端所选认证方式。排除复制时多出的空格,确认使用的是当前实例的凭据。主机指纹异常先核验身份,不绕过警告。
检查本机防火墙、代理、公司出口和客户端权限。可在获准的另一条网络复测,判断问题是否随线路变化。不要通过永久关闭安全软件来换取一次连接成功。
写明实例标识、连接协议、目标端口、错误原文、发生时间与时区,以及已完成的排查步骤。说明“SSH 可用但 VNC 不可用”比只写“连不上”更有帮助;截图和日志先移除密码、私钥、令牌与其他敏感内容。
已购机器的问题在控制台提交工单,便于关联实例。售前线路或客户端兼容性咨询可发送邮件至 support@metalvnc.com。
比较两档 M4 的内存与存储,再选择节点和计费周期。先用实际网络验证 SSH 与桌面体验,再安排持续构建任务;可用性以控制台实时返回为准。