新增金鑰
在主控台新增
- 在主控台開啟 SSH 金鑰,網址是
/keys。 - 選擇 新增 SSH 金鑰。
- 輸入名稱,最多 64 個字元 —
work laptop、desktop,只要能讓你認出這是哪台機器就好。這個名稱是給你自己看的標籤,不會送到執行個體上。 - 把
.pub檔案的完整內容貼進公開金鑰。 - 選擇 新增金鑰。
金鑰會出現在清單裡,附上它的 SHA256 指紋和新增的時間。
整行一次貼上,從 ssh-ed25519 一直到結尾的註解。Superheat 會拿類型去比對接受清單,並解碼金鑰內容,所以貼上被截斷的內容、貼上私密金鑰,或用了不支援的演算法,回來的都是 INVALID_SSH_KEY。新增一把你已經有的金鑰會回傳 DUPLICATE_SSH_KEY,比對的依據是指紋而不是名稱。
金鑰屬於使用者,不屬於組織
SSH 金鑰屬於你的使用者帳號。你所加入的每一個組織它都跟著你走,切換組織不會改變清單裡的內容。
| 情況 | 會發生什麼事 |
|---|---|
| 團隊成員開啟他們的 SSH 金鑰頁面 | 他們看到自己的金鑰,永遠看不到你的 |
| 你切換到另一個組織 | 你的金鑰還在,原封不動 |
| 有人加入你的組織 | 他們自己新增金鑰;沒有任何東西是共用的 |
| 有人被移出組織 | 他們的金鑰留在他們自己的帳號上 |
沒有組織層級的共用金鑰,而且一個執行個體部署時只會帶一把金鑰:你在部署表單上挑的那一把。
金鑰在啟動時就寫死了
部署頁面上有一個 SSH 金鑰選擇器。它預設是 不使用金鑰(僅網頁終端機),所以你得刻意去挑自己的金鑰。
你挑的那把金鑰,會在執行個體建立的過程中寫進該執行個體的授權金鑰。就只有那一個時間點會做這件事。
| 動作 | 對執行個體的影響 |
|---|---|
| 部署時有選金鑰 | 那把金鑰會裝上去,SSH 在 ssh、jupyter 和 vm 啟動模式下可用 |
| 部署時沒選金鑰 | 那個執行個體活著的期間,都不會有金鑰 |
| 事後才把金鑰加進帳號 | 已存在的執行個體不受影響 |
| 停止執行個體再重新啟動 | 它保留啟動當時帶的那把金鑰;不會重新讀取任何東西 |
| 從 SSH 金鑰頁面刪掉金鑰 | 已經在跑的執行個體仍保有它;新的部署就選不到了 |
只有當範本的啟動模式會啟動 Superheat entrypoint 時 — 也就是 ssh、jupyter 和 vm — 金鑰才會送進容器。args 範本跑的是映像檔自己的 entrypoint,它不會啟動 sshd,所以在那裡選金鑰,你也沒有東西可以連。請參閱啟動模式。
執行個體上的 SSH 只認金鑰。沒有密碼可以退而求其次。
沒有任何 API 呼叫、主控台操作或重新啟動,能把金鑰裝到一個已經存在的執行個體上。如果你沒帶金鑰就部署,重新部署是唯一能拿到 shell 的方法。
如果你忘了
執行個體還是你的,也還在計費 — 你失去的是存取權,不是機器或硬碟。
- 現在就到 SSH 金鑰頁面把你的金鑰加上去,讓下一次部署帶得到它。
- 如果範本會啟動 JupyterLab,就從執行個體頁面開啟它,用它的終端機把硬碟上你需要的東西複製出來。
- 銷毀執行個體,然後選好金鑰重新部署。
銷毀會永久刪除硬碟。動手前先讀停止與銷毀。
停止再啟動沒有用。金鑰是在建立執行個體時決定的,不是在啟動時。
從 API
| 方法 | 路徑 | 用途 |
|---|---|---|
GET | /v1/ssh-keys | 列出你的金鑰及其指紋 |
POST | /v1/ssh-keys | 新增金鑰 |
DELETE | /v1/ssh-keys/{key_id} | 移除金鑰 |
{
"name": "work laptop",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8mQ2sT9vXbN1kR4pLwZ0aYcE7hJ6uD3fGgH5iKmNoP you@example.com"
}
回傳的 id 就是你建立執行個體時要傳給 ssh_key_id 的值。
這些是帳號端點,所以只吃工作階段權杖 — 組織 API 金鑰(shk_…)在這三個端點上都會被拒絕。API 金鑰部署時仍然可以傳 ssh_key_id;但它指名的那把金鑰,必須屬於建立該 API 金鑰的使用者。請參閱驗證。