有次人在外面,想從手機回 Mac 看一下正在跑的東西。不是要開遠端桌面,只是想進 terminal 查狀態、跑一個指令。

這件事聽起來很像「開 SSH 就好」,但我很快就卡在另一題:手機到底要連到哪裡?家裡的公網 IP 會變,路由器也沒有替我開 port。最後讓這條路變得簡單的,不是 SSH 本身,而是先裝了 Tailscale。

直接 SSH 回家,為什麼沒有想像中簡單?

SSH 很擅長讓人從遠端登入一台電腦;問題是,多數家用 Mac 都在路由器後面。若想直接從外面連回來,通常得查公網 IP、設定 port forwarding,還要自己承擔把 SSH port 暴露到網際網路的安全性問題。

我把這個擔心拿去跟 AI 討論,它推薦我研究 Tailscale。查完才發現,它不是把 SSH port 換一種方式公開出去,而是用登入帳號和裝置身分,把手機與 Mac 放進同一個私有網路;SSH 只在這個網路裡使用。

我想要的比較單純:只有我的手機能找到我的 Mac,兩台裝置不需要因此變成公開服務。

Tailscale 是什麼?

Tailscale 是把自己的裝置組成私有網路的工具。它以登入身分辨識裝置:Mac 和 iPhone 分別安裝 App、登入同一個帳號後,就會被放進同一個 tailnet

可以把它想成一個只屬於自己的小型網路。加入的裝置會得到可互相使用的 Tailscale 位址,並以 WireGuard 建立加密連線。Tailscale 的官方說明把這種模式稱為 peer-to-peer mesh network;對我來說,最實際的差別是:裝置即使各自在不同網路、隔著 NAT 或防火牆,通常也不必再設定 port forwarding 才能互相找到。

所以 Tailscale 不是 SSH 的替代品,也不是夾在 SSH 中間的一條神祕隧道。它先把「手機能安全找到 Mac」這件事處理好;SSH 才是在這張私有網路上,實際登入 Mac 的方式。

先讓 Mac 和手機加入同一個 tailnet

手機與 Mac 透過同一個 Tailscale 帳號加入私有網路,再以 SSH 連線
圖:手機與 Mac 以同一個帳號加入 Tailscale 私有網路;SSH 是手機登入 Mac 的方式。

先到 Tailscale Download 下載 Mac 與 iPhone 的版本。Mac 端也可以依官方 macOS 安裝文件選擇適合自己的安裝方式。

兩端安裝後,用同一個登入身分登入。完成時,Tailscale 管理頁與 App 都會看到兩台裝置;如果你使用 CLI,也可以在 Mac 上確認:

Terminal window
tailscale status

輸出會列出已加入 tailnet 的裝置與位址。這個位址不是家裡的公網 IP,而是只在自己的 Tailscale 網路內使用的位址。記下 Mac 的那一個,下一步 SSH 會用到。

開啟 Mac 的遠端登入

網路已經通了,還要讓 Mac 接受 SSH 登入。

在 macOS 的路徑是:系統設定 → 一般 → 共享 → 遠端登入。打開後,確認要允許登入的使用者帳號。

也可以在 Mac 上用指令開啟並驗證:

Terminal window
sudo systemsetup -setremotelogin on
sudo systemsetup -getremotelogin
# Remote Login: On

接著在手機的 SSH App 新增連線:

  • Host:Mac 的 Tailscale 位址
  • Port:22
  • User:Mac 使用者名稱

螢幕鎖定或進入螢幕保護程式不會讓 SSH 中斷;真正會讓連線消失的是系統睡眠。如果 Mac 需要長時間等著被連回,睡眠設定仍要另外處理。

設好後,SSH 才終於變成一條真的能用的路

從安裝 Tailscale 到手機看到 Mac,大部分時間都花在理解「原來 SSH 前面還有網路這一層」。一旦兩台裝置已經在同一個 tailnet,後面的 SSH 設定反而很直白。

現在出門時,我知道手機有一條不必記公網 IP、也不用回家碰路由器的路能回到自己的 Mac。透過 Tailscale,SSH 終於變成一條安全、真的能用的路。這種設定平常安靜得像沒做過,但真的需要它的時候,就很值得。