跳至主要內容

新增金鑰

在主控台新增

  1. 在主控台開啟 SSH 金鑰,網址是 /keys
  2. 選擇 新增 SSH 金鑰
  3. 輸入名稱,最多 64 個字元 — work laptopdesktop,只要能讓你認出這是哪台機器就好。這個名稱是給你自己看的標籤,不會送到執行個體上。
  4. .pub 檔案的完整內容貼進公開金鑰
  5. 選擇 新增金鑰

金鑰會出現在清單裡,附上它的 SHA256 指紋和新增的時間。

整行一次貼上,從 ssh-ed25519 一直到結尾的註解。Superheat 會拿類型去比對接受清單,並解碼金鑰內容,所以貼上被截斷的內容、貼上私密金鑰,或用了不支援的演算法,回來的都是 INVALID_SSH_KEY。新增一把你已經有的金鑰會回傳 DUPLICATE_SSH_KEY,比對的依據是指紋而不是名稱。

金鑰屬於使用者,不屬於組織

SSH 金鑰屬於你的使用者帳號。你所加入的每一個組織它都跟著你走,切換組織不會改變清單裡的內容。

情況會發生什麼事
團隊成員開啟他們的 SSH 金鑰頁面他們看到自己的金鑰,永遠看不到你的
你切換到另一個組織你的金鑰還在,原封不動
有人加入你的組織他們自己新增金鑰;沒有任何東西是共用的
有人被移出組織他們的金鑰留在他們自己的帳號上

沒有組織層級的共用金鑰,而且一個執行個體部署時只會帶一把金鑰:你在部署表單上挑的那一把。

金鑰在啟動時就寫死了

部署頁面上有一個 SSH 金鑰選擇器。它預設是 不使用金鑰(僅網頁終端機),所以你得刻意去挑自己的金鑰。

你挑的那把金鑰,會在執行個體建立的過程中寫進該執行個體的授權金鑰。就只有那一個時間點會做這件事。

動作對執行個體的影響
部署時有選金鑰那把金鑰會裝上去,SSH 在 sshjupytervm 啟動模式下可用
部署時沒選金鑰那個執行個體活著的期間,都不會有金鑰
事後才把金鑰加進帳號已存在的執行個體不受影響
停止執行個體再重新啟動它保留啟動當時帶的那把金鑰;不會重新讀取任何東西
從 SSH 金鑰頁面刪掉金鑰已經在跑的執行個體仍保有它;新的部署就選不到了

只有當範本的啟動模式會啟動 Superheat entrypoint 時 — 也就是 sshjupytervm — 金鑰才會送進容器。args 範本跑的是映像檔自己的 entrypoint,它不會啟動 sshd,所以在那裡選金鑰,你也沒有東西可以連。請參閱啟動模式

執行個體上的 SSH 只認金鑰。沒有密碼可以退而求其次。

部署前就把金鑰加好,不要事後才加

沒有任何 API 呼叫、主控台操作或重新啟動,能把金鑰裝到一個已經存在的執行個體上。如果你沒帶金鑰就部署,重新部署是唯一能拿到 shell 的方法。

如果你忘了

執行個體還是你的,也還在計費 — 你失去的是存取權,不是機器或硬碟。

  1. 現在就到 SSH 金鑰頁面把你的金鑰加上去,讓下一次部署帶得到它。
  2. 如果範本會啟動 JupyterLab,就從執行個體頁面開啟它,用它的終端機把硬碟上你需要的東西複製出來。
  3. 銷毀執行個體,然後選好金鑰重新部署。

銷毀會永久刪除硬碟。動手前先讀停止與銷毀

停止再啟動沒有用。金鑰是在建立執行個體時決定的,不是在啟動時。

從 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 金鑰的使用者。請參閱驗證

金鑰加好之後,接著去部署,然後透過 SSH 連線