用 VNC 与 SSH 连上你的云端 Mac

凭据邮件到手后,5 分钟内你应该已经在远程桌面里了。这页把图形接入、命令行接入、延迟数据和安全加固一次讲完,按顺序照做即可。

Access Overview

三种接入方式,按用途选

每台 Mac mini 交付时默认开启 VNC(5900)与 SSH(22)双通道,凭据在同一封加密邮件里。Tailscale 是可选项,自己装、自己管。

VNC 图形桌面

看到完整 macOS 桌面。适合装证书、点 Xcode 图形界面、剪 4K 视频这类离不开鼠标的事。带宽建议 ≥10Mbps。

SSH 命令行

跑构建脚本、注册 CI runner、rsync 传文件的主通道。对延迟不敏感,2G 网络也能用,是我们推荐的日常方式。

Tailscale 组网(可选)

把云端 Mac 拉进你的私有网络,内网 IP 直连,不暴露公网端口。你有完整管理员权限,brew 一行装好。

方式协议 / 端口适合不适合延迟敏感度
VNCRFB / 5900图形操作、装证书、模拟器交互、视频剪辑长时间自动化任务高,建议 <120ms
SSHSSH / 22脚本、CI runner、文件同步、tmux 长任务必须点图形界面的一次性配置低,300ms 也可用
TailscaleWireGuard / UDP多设备接入、关闭公网端口后的隧道底座不想多装软件的极简场景随底层线路
VNC Setup

VNC 连接:两条路,三分钟

路线 A:macOS 自带屏幕共享

如果你本地也是 Mac,什么都不用装。Finder 里按 ⌘K(前往 → 连接服务器),输入凭据邮件里的地址,格式如下,然后填入 VNC 密码即可。

路线 B:RealVNC Viewer(Windows / Linux)

新建连接时填 节点IP:5900,Encryption 选 Prefer on,Picture quality 先用 Automatic,连上后再按下表手动调档。Scaling 建议 100%,避免二次缩放导致文字发虚。

首次连接如提示指纹确认,核对凭据邮件末尾的主机指纹再点接受。密码输错 5 次会触发 60 秒锁定,这是默认防爆破策略,不是故障。

local — screen sharing
# Finder ⌘K,或直接在终端打开
$ open vnc://203.0.113.10:5900
# 分辨率随会话调整(远端执行)
$ displayplacer "id:main res:1920x1080 hz:60"
✓ connected: mini-tokyo-07 (M4, 24GB)

画质档位怎么调

VNC 手感由「分辨率 × 色深 × 压缩质量」三个变量决定。原则:先降分辨率,再降色深,最后才动压缩质量——压缩伪影比低分辨率更影响读代码。

档位分辨率色深JPEG 质量估算带宽适用网络
流畅优先1280×72016-bit4/93~5 Mbps4G 热点、跨洋线路
均衡(默认推荐)1920×108016-bit6/98~12 Mbps家用宽带、就近节点
画质优先2560×144024-bit9/920~35 Mbps有线千兆 + 延迟 <60ms

色深从 24-bit 降到 16-bit 约省 40% 带宽,写代码肉眼几乎无差;剪辑调色时再切回 24-bit。

SSH Practice

SSH 实践:密钥、传文件、长任务

下单时上传过 SSH 公钥的话,交付即密钥直连。没上传也没关系,先用邮件里的初始密码登录,然后照第一块终端把密码登录关掉。

仅密钥登录
# 本地:把公钥推上去(首次用密码验证)
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@203.0.113.10
# 远端:关闭密码登录
$ sudo sed -i '' 's/^#\{0,1\}PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
$ sudo launchctl kickstart -k system/com.openssh.sshd
✓ 此后仅接受密钥认证
rsync / sshfs 传文件
# 增量上传项目目录(断点续传)
$ rsync -avzP --exclude .git ./MyApp admin@203.0.113.10:~/work/
# 把远端目录挂载到本地(需 macFUSE)
$ sshfs admin@203.0.113.10:/Users/admin/work ~/remote-work
# 用完卸载
$ umount ~/remote-work
tmux 保持长任务
# 开一个会话跑全量归档构建
$ tmux new -s build
$ xcodebuild archive -scheme MyApp -destination 'generic/platform=iOS'
# 按 Ctrl-b d 脱离,断网也不中断
# 回来接上
$ tmux attach -t build

三条工程习惯

  • 长任务一律进 tmux。SSH 断连不等于任务终止,只要它跑在 tmux 里;裸跑在前台的进程会随会话一起被挂断。
  • 大文件走 rsync 而不是 VNC 剪贴板拖拽。rsync 有校验、有断点续传,拖拽两者都没有,50GB 素材尤其如此。
  • 本地 ~/.ssh/config 里给节点起别名并加 ServerAliveInterval 30,以后 ssh tokyo 两个词直达,NAT 超时断连也一并解决。
Latency Data

节点延迟实测表

选节点前先看这张表:数值是 ICMP ping 中位数(毫秒),越低越跟手。经验口径:<60ms 拖拽接近本地,60~120ms 日常开发无碍,>150ms 建议纯 SSH 或无头模式。

发起城市→ 东京节点→ 首尔节点→ 硅谷节点建议
北京5246152首选首尔,东京互备
上海3842148首选东京
深圳4844158首尔与东京均可
东京234108本地直连
首尔332132本地直连
新加坡6874168东京略优,VNC 建议均衡档
洛杉矶1021286首选硅谷
测试时间 2026-07-24 ~ 2026-07-30,每日 4 个时段 样本数 每城市→每节点 mtr -c 500,取中位数 运营商口径 国内为电信 163 与移动 CMI 混测取均值,海外为当地骨干 ISP

想自己复测:各节点的测试 IP 与 mtr 用法在 遇到问题 页的网络自检一节,附带路由追踪提交工单的模板。

Low Latency

低延迟四个技巧

1. 按实测表就近选节点

物理距离没有软件解法。上表 40ms 与 150ms 的差距,任何压缩参数都追不回来。国内用户默认东京或首尔,美洲用户默认硅谷。

2. 用压缩等级换流畅度

线路一般时把 VNC 切到「流畅优先」档:16-bit 色深 + 中等 JPEG 质量,帧率通常能从 12fps 拉回 25fps 以上,滚动代码不再拖影。

3. 有线优先,Wi-Fi 用 5GHz

2.4GHz Wi-Fi 的抖动常见 ±30ms,有线可压到 ±3ms。VNC 对抖动比对绝对延迟更敏感——平均 50ms 但抖动大,体感比稳定 80ms 还差。

4. 图形归 VNC,重活归 SSH

编译、打包、传文件全走 SSH 后台跑,VNC 只留给必须点鼠标的操作。屏幕不刷新,带宽自然让给数据传输。

Hardening

安全加固清单

机器是你独享的物理节点,加固责任也在你手上。按顺序做完这五条,公网暴露面基本收干净。

  • 改掉 SSH 默认端口。/etc/ssh/sshd_config 里的 Port 22 改成高位端口(如 2222),自动化扫描流量立减九成。
  • 关闭密码登录,只留密钥。上一节的两行命令,做一次永久生效;初始密码用完即废。
  • 装 fail2ban 防爆破。brew install fail2ban 后启用 sshd jail,默认 5 次失败封 10 分钟,对 CI 无感。
  • VNC 不裸奔公网,走 SSH 隧道。右侧命令建好隧道后,在控制台防火墙里把 5900 端口对公网关闭。
  • 证书与密钥放独立钥匙串。CI 签名用的钥匙串单独建、单独解锁,不要混进登录钥匙串。
VNC over SSH 隧道
# 本地建隧道:远端 5900 映射到本地 5901
$ ssh -N -L 5901:localhost:5900 admin@203.0.113.10
# 另开窗口,连本地端口即可
$ open vnc://localhost:5901
✓ VNC 流量全程走 SSH 加密
Headless CI

无头 CI 模式:不开 VNC 的最小化实践

如果这台机器只做 self-hosted runner,建议全程不开图形会话:更少暴露面、更少内存占用、零 VNC 带宽。

  • 关闭屏幕共享服务,只留改过端口、仅密钥登录的 SSH,公网暴露面收敛到一个端口。
  • runner 用 launchd 常驻:GitHub Actions runner 自带 svc.sh 会生成 LaunchDaemon,开机自启、崩溃自拉起,断线自动重连。
  • 钥匙串提前解锁进脚本:构建前跑 security unlock-keychain,签名不再依赖图形会话弹窗。
  • 每周期一次免费重装是你的兜底:环境彻底脏了,重装比修快,DerivedData 缓存按 CI 集成指引 做持久化即可。
headless runner 最小化
# 关闭屏幕共享(需要时随时可开回)
$ sudo launchctl disable system/com.apple.screensharing
# 注册并常驻 GitHub Actions runner
$ ./config.sh --url https://github.com/org/repo --token XXXX
$ sudo ./svc.sh install && sudo ./svc.sh start
# 构建前解锁签名钥匙串
$ security unlock-keychain -p "$KC_PASS" ci.keychain-db
✓ runner online, no GUI session
Troubleshooting

连接故障速查表

症状对号入座,一行命令先修再说;修不好带上现象和已尝试步骤发工单,首响 2 小时内。

症状最常见原因一行修复
VNC 黑屏屏幕共享服务异常退出sudo launchctl kickstart -k system/com.apple.screensharing
VNC 卡顿掉帧画质档位超出线路承载色深切 16-bit,JPEG 质量降到 4/9,分辨率降到 1280×720
SSH 连接超时端口改过后仍连 22,或本地防火墙拦截ssh -p 2222 admin@203.0.113.10 -v 看握手停在哪一步
SSH 拒绝密钥本地私钥权限过宽chmod 600 ~/.ssh/id_ed25519
SSH 频繁断连NAT 空闲超时切断长连接printf "ServerAliveInterval 30\n" >> ~/.ssh/config
剪贴板不同步远端剪贴板服务挂起SSH 执行 killall pboard,系统自动重启该服务
隧道连不上 5901隧道进程已退出重跑 ssh -N -L 5901:localhost:5900 admin@203.0.113.10

更完整的逐步排查(含 Xcode 签名失败、钥匙串解锁)在 故障排查手册

凭据 10 分钟到邮箱,今晚就能连上

付款后 10 分钟内交付 VNC/SSH 凭据,按天起租,7 天内按未用天数退款。