# 主機金鑰驗證

Tessera 採用初次使用即信任（TOFU）：第一次連線到某台伺服器時會固定它的主機
金鑰，之後每一次連線都會拿來比對這個固定項。

## 首次連線

第一次連線到某台伺服器時，Tessera 會擋下來，顯示 **未知主機** 工作表，
上面有：

- 端點（位址與連接埠），
- **伺服器指紋**（SHA-256，相容 OpenSSH），
- **金鑰類型**。

請拿一個你信得過的來源核對指紋 —— 你的服務商後台，或在伺服器上執行：

```sh
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
```

然後輕點 **信任並連線** 將它固定，或輕點 **取消** 中止。在一台主機的金鑰被
信任之前，Tessera 不會在上面安裝金鑰，[檔案](https://bambouville.com/docs/zh-hant/files/)面板也會請你先開啟一個
終端機工作階段。

信任一次就涵蓋整條連線：mosh 主機的信任是搭著它的引導 SSH 建立的，所以 tmux
側通道不會再提示一次。當你透過[接續互通](https://bambouville.com/docs/zh-hant/continuity/)過來，或透過
[鄰近設定](https://bambouville.com/docs/zh-hant/nearby-setup/)匯入一台主機時，工作表還會說明這把金鑰是否與你另一
台裝置所信任的相符 —— 而當兩者*不同*時，工作表會把 **不要連線** 放在最前面。
這些資訊很有用，但固定與否仍是每台裝置各自明確的決定；**信任絕不同步**。

![未知主機工作表，顯示伺服器位址、SHA-256 指紋、金鑰類型 ssh-ed25519，以及「信任並連線」和「取消」按鈕。](https://bambouville.com/docs/assets/img/unknown-host.png)

*初次使用即信任的提示。這裡顯示的指紋就是你拿去和伺服器核對的那一個。*


## 主機金鑰變更時

如果某台伺服器的金鑰與已固定的不同，Tessera 會顯示 **主機金鑰已變更**，
附上經典的「警告：遠端主機的識別資訊已改變！」提示、新舊兩份指紋，
以及 **信任** / **取消** 按鈕。

除非你清楚它為什麼變了，否則請把這當成可能的中間人攻擊 —— 合理的原因包括
重裝伺服器、更換伺服器，或刻意輪替它的主機金鑰。

## 已知主機頁面

**已知主機** 頁面（iPad 在側邊欄；iPhone 在金鑰標籤的選擇器後面）列出每一把
已固定的金鑰：主機、演算法、加入日期和狀態。篩選按鈕可以縮小列表：

- **已驗證** —— 已固定且相符，
- **已過時** —— 90 天內沒有見過，
- **已變更** —— 看到了不同的金鑰；紅色橫幅會標出這個不一致。

展開某一列可以看到它的指紋，並可 **拷貝指紋**、**接受新金鑰**
（在確認是合理變更之後），或 **移除** 這個固定項。移除固定項之後，
下一次連線會重新被當成初次連線。

固定項儲存在 App「Application Support」目錄下的 `known_hosts.json`，
以 `address:port` 為鍵，指紋為相容 OpenSSH 的 SHA-256。

## 輸出與輸入

頁首的 **輸出** 按鈕會把你的固定項寫成標準的 OpenSSH `known_hosts` 檔案 ——
只有公開主機金鑰和指紋，沒有任何機密 —— 可直接給其他任何 SSH 用戶端使用。
**輸入** 會讀取 `known_hosts` 檔案，並在合併任何東西之前列出它找到的每一個
固定項讓你檢視，因此由你決定哪些要進來；若檔案裡沒有可用的內容，它會這麼說
（「未找到可輸入的主機固定項。」）。iPad 和 iPhone 上都可以使用。

![已知主機頁面，帶有全部、已驗證、已過時和已變更的篩選按鈕，一張列出已固定主機的表格顯示金鑰演算法、加入日期和狀態，其中一列展開後顯示指紋以及拷貝和移除按鈕。](https://bambouville.com/docs/assets/img/known-hosts.png)

*每一台已固定的主機，都可依狀態篩選。展開一列即可看到它已儲存的指紋。*
