SSH 与 VNC 适用场景对比
按工作流与网络条件选对方式:SSH 适合自动化与无头构建,VNC 适合完整图形桌面;小团队建议默认 SSH、VNC 按需。
| 维度 | SSH | VNC(屏幕共享) |
|---|---|---|
| 适用场景 | CI/CD、脚本、无头构建、Git、多设备工作流、命令行 | Xcode 界面、模拟器、可视化调试、临时 GUI 操作 |
| 延迟/带宽 | 极低,文本与指令为主,高延迟下仍可用 | 敏感;建议 <100ms,高延迟易卡顿,带宽需求较高 |
| 多用户 | 每用户多会话并发,天然隔离 | 每用户一个图形会话或共享屏幕,需独立账户 |
| 权限模型 | 按 Unix 用户 + 公钥,细粒度控制 | 登录绑定 Unix 账户,与 SSH 权限一致 |
权限与隔离配置要点
共享构建机上为每位成员做账户与目录隔离,同时可控共享(如构建缓存),避免互相干扰与越权。
- 一人一账户: 系统设置 → 用户与群组(或
dscl)为每位开发者创建独立 Unix 账户,禁止共用通用账户。 - 仅允许 SSH 密钥登录: 在
/etc/ssh/sshd_config中设置PasswordAuthentication no、PubkeyAuthentication yes,重启sshd。 - 共享组与 setgid 目录: 新建组(如
builders),将用户加入;对共享目录使用chmod 2775,新文件继承组,避免权限混乱。 - Keychain 隔离: 签名与证书按人/用途分开,避免多人共用一个登录 Keychain;可配合 Fastlane Match 等集中管理。
- 审计与分发: 公钥经脚本或配置仓库统一分发,记录谁在何时以何种方式(SSH/VNC)登录,便于排查与合规。
共享构建机最佳实践
以「自动化构建为主、偶尔看桌面」为原则:默认 SSH + 按需开 VNC,既省带宽又降低单点故障面。高延迟网络下尽量用 SSH;VNC 仅用于 Xcode 界面、模拟器或可视化调试。Mac 原生 OpenSSH 与屏幕共享(VNC)、类 Unix 多用户与 Keychain 隔离,比 Windows 多用户构建环境更易管控,适合小团队协作型开发与多设备工作流。
常见问题与排错入口
快速自检,便于定位问题。
| 现象 | 排查方向 |
|---|---|
| SSH 连接超时/被拒 | 确认 sshd 已启动、防火墙放行 22 端口、公钥已加入对应用户 ~/.ssh/authorized_keys;检查 sshd_config 未禁用 PubkeyAuthentication。 |
| VNC 卡顿或黑屏 | 测网络延迟(建议 <100ms);系统设置中确认「屏幕共享」已开启;防火墙放行 VNC 端口;降低分辨率与色彩深度;高延迟时改用 SSH。 |
| 多用户互相干扰 | 确认每人独立账户、共享目录 setgid 与组权限正确;Keychain 与构建缓存按用户隔离。 |
选型清单
决策与落地时可逐项勾选,确保选型与权限隔离到位。
- □ 以命令行/CI/无头构建为主 → 选 SSH。
- □ 需要 Xcode 界面/模拟器/可视化调试 → 选 VNC 或 SSH + 按需 VNC。
- □ 网络延迟 >100ms → 优先 SSH,慎用 VNC。
- □ 已为每位成员创建独立 Unix 账户,禁止共用账户。
- □ 已启用仅公钥登录,关闭密码认证。
- □ 共享目录已设 setgid(
chmod 2775)与组归属。 - □ Keychain/签名按人或用途隔离,有审计或统一分发流程。
FAQ
Q:小团队远程 Mac 该选 SSH 还是 VNC?
CI/CD、脚本、无头构建与多设备工作流首选 SSH;需要完整图形桌面(Xcode、模拟器、可视化调试)时用 VNC。建议默认 SSH,VNC 按需开启,高延迟网络下尽量用 SSH。
Q:共享构建机上如何做权限与隔离?
为每位开发者创建独立 Unix 账户,仅允许 SSH 公钥登录;用组与 setgid(chmod 2775)管理共享目录;Keychain 按人/用途隔离;公钥统一分发并记录登录审计。
Q:VNC 卡顿或 SSH 连接失败怎么排查?
VNC:检查网络延迟(建议 <100ms)、屏幕共享与防火墙、分辨率与色彩深度;高延迟改用 SSH。SSH:确认 sshd 已启、22 端口放行、公钥在 ~/.ssh/authorized_keys 且 PubkeyAuthentication 已开启。
Q:远程 Mac 与 Windows 在共享构建上有什么差异?
Mac 原生 OpenSSH 与屏幕共享(VNC)、类 Unix 多用户与 Keychain 隔离,适合小团队共享构建;Windows 以 RDP 为主,多用户构建目录与权限边界管控更复杂。