用 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 天內按未使用天數退款。