bambouville

主機與連線

主機編輯器

⌘N 新增主機,或輕點既有主機來編輯。編輯器有四個標籤 —— 連線進階轉發指令片段 —— 以及一條 連線 列。在 iPhone 上, 同樣的四個區塊以按鈕形式呈現 —— 連線進階通道指令片段 —— 其中連線欄位和通道規則會先暫存,直到你輕點儲存為止(其他編輯則如同 iPad 上 一樣立即套用);兩種裝置上的編輯器是同一個。

「連線」標籤放的是基本資料:名稱位址連接埠(1–65535)、 使用者身分(來自金鑰頁面的一把金鑰)和 密碼。 你在這裡輸入的密碼只作用於本次工作階段:它只保留在進行中的工作階段裡, 絕不會持久化。唯一的例外是透過鄰近設定接續互通建立、且以密碼驗證的主機 —— 你在新裝置上輸入一次的 密碼會以已儲存憑證的形式保存在這台裝置的鑰匙圈中,絕不同步,而且編輯器之後 仍可修改它(儲存後會取代已存的密碼)。

主機編輯器,顯示四個標籤 —— 連線、進階、轉發、指令片段 —— 以及連線欄位和連線列。
頂部橫排四個標籤,每個標籤底部都固定著一條連線列。

傳輸方式:SSH 或 Mosh

每台主機只選一種傳輸方式:

  • ssh —— 單一 SSH 連線;tmux 分頁留在主工作階段上。
  • mosh —— 基於 UDP 的 mosh 終端機。mosh 讓工作階段在 Wi-Fi ↔ 行動網路漫遊 以及睡眠/喚醒之間持續存活,在丟包嚴重的線路上也更跟手。它需要主機上已安裝 mosh-server。tmux 分頁會使用第二條 SSH 側通道。 mosh 頁面有完整說明,包括真正的回捲緩衝。

mosh 的 UDP 流量無法穿過堡壘機:如果你透過跳板主機使用 mosh, 而 mosh 伺服器無法連上,Tessera 會告訴你 (「經跳板鏈無法存取 mosh…」)並改用 SSH 重新連線。

啟動模式

  • 自動 tmux —— 接入(或建立)該主機專屬的 tmux 工作階段,名稱為決定性的 tessera-XXXXXXXX,即使重新安裝 App 也會記得。這是預設值,也是讓斷線變得 無關痛癢的那一個。
  • 具名 tmux —— 接入你自己指定名稱的 tmux 工作階段;含有無效字元的名稱會 回退成自動推導的名稱。
  • 自訂 —— 一條照字面執行的啟動指令。透過 ssh 時會送給登入 shell; 透過 mosh 時則由 mosh-server new -- <command> 執行。

tmux 模式帶來什麼,請見 tmux;啟動模式如何與通道互動,請見 連接埠轉發

跳板主機

任何已儲存的主機都可以當成 SSH 堡壘機(ProxyJump):在主機編輯器中選擇即可。 串接是可以巢狀的 —— 跳板主機自己的跳板主機會延長整條鏈 —— 編輯器會顯示最終 路徑(「a → b → 主機」),並在鏈斷掉時提出警告。

  • 每一跳都各自獨立驗證,使用自己的身分或密碼。需要密碼的跳會在編輯器的跳板 主機區段中出現 密碼 · <跳的名稱> 欄位,只保留在進行中的工作階段裡; 在每一跳都填好之前,連線按鈕會維持停用。
  • 主機金鑰提示會逐跳出現,堡壘機優先,每一次都會指明正在驗證哪個端點。
  • 斷掉的鏈會安全地失敗:如果某台跳板主機被刪除,依賴它的主機會在編輯器中提出 警告,而且連線會直接失敗,而不是悄悄改走直連。錯誤訊息會指出它來自哪一跳 (「跳板主機 <名稱>:…」)。
  • 免費方案下,另外儲存的堡壘機會自己佔用一個已儲存 主機的名額。

進階標籤

  • 系統標誌 —— 連線時自動偵測,或手動設定(macos、ubuntu、debian、alpine、 linux、raspbian)。
  • 標籤備註 —— 供你自己整理用。
  • 環境變數 —— 每行一組 KEY=value;開頭若有 export 會被去掉。這些值會 原封不動傳給遠端 shell —— $HOME$(…) 和引號都照寫的樣子生效。
  • 終端機背景 —— 針對單一主機覆蓋全域背景

環境變數和啟動指令片段只在 tmux 工作階段啟動時執行。如果你改了某台主機的 設定,而它的 tmux 工作階段已經存在,請在伺服器上結束該工作階段,才能套用 這些更改。

指令片段

「指令片段」標籤放的是 啟動指令片段:連線之後立即送出的指令 (上面提到的 tmux 注意事項同樣適用)。

連線卡住時

工作階段建立的過程中,啟動覆蓋層會標示目前所處的階段 —— 正在連線, 接著對 tmux 主機是 正在啟動 tmux(SSH)或 正在接入 tmux(mosh), 然後是 正在接入窗格。如果某個階段大約十二秒都沒有進展,覆蓋層會說明卡在 哪一階段(「仍在 正在連線 — 交握尚未完成。」),並且給你一條出路,而不是一直 轉圈:

  • 編輯主機 —— 開啟主機編輯器,適用於位址、連接埠或金鑰有問題時,
  • 重試 —— 拆掉這次嘗試,從頭重新連線,
  • 返回 —— 放棄並回到主機列表。從卡住的嘗試退出會完整中斷連線 —— 伺服器上不會留下任何東西在跑。

計時器是逐階段計算的,因此仍在推進的慢速連線永遠不會誤觸。如果是 tmux 本身 起不來 —— 沒有安裝、工作階段無法啟動,或主機自己的 dotfiles 已經在登入時啟動 tmux —— Tessera 會把你丟進一個純 shell,並以橫幅明確說明發生了什麼事, 而不是傻等一個永遠不會回應的 tmux。

啟動覆蓋層卡在連線階段:階段標題顯示「正在連線」,下方是 tmux 工作階段名稱,警告行寫著「仍在 正在連線 — 交握尚未完成。」,再下方等著「編輯主機」、「重試」和「返回」按鈕。
十二秒沒有進展:覆蓋層會指出卡在哪個階段,並給你一條出路。

工作階段

Tessera 可以同時對任意主機保持多個工作階段。自動 tmux 的主機是單例的 —— 每台主機一個 tmux 控制工作階段(具名 tmux 則是每台主機加每個工作階段名稱 一個)—— 而自訂指令的主機可以有好幾個(「名稱 #2」、「名稱 #3」)。側邊欄的 進行中 區塊會列出每一個工作階段,標示為「名稱 (tmux)」、 「名稱 (tmux: 工作階段名稱)」或「名稱 #N」,每一項都有中斷連線按鈕。 在 iPhone 上,同一份列表就是 工作階段 標籤。

輕點即可在工作階段之間切換,也可以用 ⌘⇧K / ⌘⇧J 逐一走訪相鄰項目, 或開啟 ⌘K 快速切換面板:輸入即可篩選工作階段(最近使用的排前面)和智慧體 —— 在查詢前加上 @ 可限定為智慧體。

工作階段回復

設定 → 終端機 → 啟動 → 先前的連線 控制全新啟動時會發生什麼事:

  • 詢問 —— 顯示「重新打開先前的連線」工作表,選項為 「始終重新打開」/「重新打開」/「稍後再說」。
  • 一律 —— 靜默重新連線。
  • 永不 —— 從乾淨狀態開始。

在 iPhone 上,這個選擇工作表換成單一個 啟動時回復 開關。只有金鑰材料完整 的已儲存主機工作階段才能回復。

回到前景的處理方式相同,但更聰明:Tessera 會等 每一個 開啟中的工作階段都 回報自己的狀態,才決定要重新連線哪些,所以當好幾台主機同時掉線 —— 或某個 mosh 工作階段拖了很久才承認自己已經死掉 —— 每一個都會被重新連上,沒有一個被丟下。 在這段期間,啟動覆蓋層會把其餘的數出來(「+2 個工作階段正在重新連線」)。 Tessera 刻意只有單一視窗(iPad 上沒有多場景);側邊欄和面板 —— 在 iPhone 上則是標籤列與切換器 —— 就是你四處移動的方式。