# 主機與連線

## 主機編輯器

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

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

![主機編輯器，顯示四個標籤 —— 連線、進階、轉發、指令片段 —— 以及連線欄位和連線列。](https://bambouville.com/docs/assets/img/host-editor.png)

*頂部橫排四個標籤，每個標籤底部都固定著一條連線列。*


## 傳輸方式：SSH 或 Mosh

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

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

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

## 啟動模式

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

tmux 模式帶來什麼，請見 [tmux](https://bambouville.com/docs/zh-hant/tmux/)；啟動模式如何與通道互動，請見
[連接埠轉發](https://bambouville.com/docs/zh-hant/port-forwarding/#mosh-與轉發)。

## 跳板主機

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

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

## 進階標籤

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

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

## 指令片段

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

## 連線卡住時

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

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

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

![啟動覆蓋層卡在連線階段：階段標題顯示「正在連線」，下方是 tmux 工作階段名稱，警告行寫著「仍在 正在連線 — 交握尚未完成。」，再下方等著「編輯主機」、「重試」和「返回」按鈕。](https://bambouville.com/docs/assets/img/stall-notice.png)

*十二秒沒有進展：覆蓋層會指出卡在哪個階段，並給你一條出路。*

## 工作階段

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

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

## 工作階段回復

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

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

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

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