產生金鑰
要在執行個體上開啟 shell,你得先有一組 SSH 金鑰組。如果你已經有了,直接沿用。先看看你手上有什麼:
ls ~/.ssh/*.pub
列在那裡的任何 .pub 檔案都是可以加進 Superheat 的公開金鑰,只要它的類型在支援清單上。如果那裡什麼都沒有,就產生一組。
產生 ed25519 金鑰
ssh-keygen -t ed25519 -C "you@example.com"
ssh-keygen 會問你要把金鑰存到哪裡,以及要不要設定通行密語。按 Enter 接受預設位置。
-C 後面的文字是隨公開金鑰一起帶著走的註解。只要能提醒你這把金鑰放在哪台機器上,寫什麼都行。
檔案會落在哪裡
| 路徑 | 這是什麼 | 誰看得到 |
|---|---|---|
~/.ssh/id_ed25519 | 私密金鑰 | 沒有人 — 它永遠不該離開你的機器 |
~/.ssh/id_ed25519.pub | 公開金鑰 | 這就是你要貼進 Superheat 的那一半 |
公開金鑰是單獨一行:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8mQ2sT9vXbN1kR4pLwZ0aYcE7hJ6uD3fGgH5iKmNoP you@example.com
沒有 .pub 副檔名的那個檔案是你的私密金鑰,它的開頭是 -----BEGIN OPENSSH PRIVATE KEY-----。如果你曾經把它貼進表單、聊天室或工單,就重新產生一組金鑰組並刪掉舊的。
複製公開金鑰
| 平台 | 指令 |
|---|---|
| macOS | pbcopy < ~/.ssh/id_ed25519.pub |
| Linux、X11 | xclip -selection clipboard < ~/.ssh/id_ed25519.pub |
| Linux、Wayland | wl-copy < ~/.ssh/id_ed25519.pub |
如果這些都沒安裝,就把檔案印出來手動複製。它只有一行,而且整行都不能少。
cat ~/.ssh/id_ed25519.pub
權限
只要機器上的其他使用者讀得到私密金鑰,OpenSSH 就會拒絕使用它。如果你是從備份還原 ~/.ssh,或在機器之間複製過它,請重設權限模式:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
通行密語
通行密語會把硬碟上的私密金鑰加密,這樣就算檔案被人拿走,那份副本對他也沒有用。設一個。
代價是要打字。ssh-agent 會在你這次工作階段接下來的時間裡保留解密後的金鑰:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
在 macOS 上,把通行密語存進登入鑰匙圈,代理程式在重新開機後就能再次取用這把金鑰:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
你隨時可以新增、變更或移除通行密語。這只會改寫私密金鑰檔案 — 公開金鑰和它的指紋不會變,所以已經加進 Superheat 的金鑰照樣能用:
ssh-keygen -p -f ~/.ssh/id_ed25519
在 Windows 上
ssh-keygen 隨 Windows 10 和 Windows 11 內建的 OpenSSH 用戶端一起提供。開啟 PowerShell,執行同一道指令:
ssh-keygen -t ed25519 -C "you@example.com"
金鑰組會落在 C:\Users\<you>\.ssh\。把公開金鑰印出來,或直接送進剪貼簿:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
想省下重複輸入通行密語的麻煩,就啟動代理程式服務並載入金鑰。Set-Service 那一行需要系統管理員權限的 PowerShell,而且只需要執行一次:
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
在 Windows 上有兩件事特別容易絆倒人:
| 情況 | 該怎麼做 |
|---|---|
| 你在 WSL 裡工作 | WSL 有自己的家目錄,所以 Linux 裡的 ~/.ssh 並不是 C:\Users\<you>\.ssh。你打算在哪個環境執行 ssh,就在那個環境產生金鑰。 |
| 你使用 PuTTY | .ppk 檔案不是 OpenSSH 公開金鑰。請在 PuTTYgen 裡,從標示為 "Public key for pasting into OpenSSH authorized_keys file" 的方框中把文字複製出來 — 那才是 Superheat 接受的內容。 |
檢查指紋
ssh-keygen -lf ~/.ssh/id_ed25519.pub
256 SHA256:Pr6lxPUhwJ7+VHus18B6LLkVm4mFu0L9hn8eqgpOyag you@example.com (ED25519)
SHA256: 這個值就是你把金鑰加進去之後,主控台顯示在金鑰旁邊的內容,你也是靠它分辨兩把金鑰。請參閱支援的金鑰類型。
金鑰產生好之後,就把它加進你的帳號 — 在你部署任何東西之前。