生成密钥
在实例上打开 shell 之前,你需要一个 SSH 密钥对。如果你已经有了,直接复用即可。先看看你手上有什么:
ls ~/.ssh/*.pub
那里列出的任何 .pub 文件都是可以添加到 Superheat 的公钥,只要它的类型在支持列表中。如果那里什么都没有,就生成一对。
生成 ed25519 密钥
ssh-keygen -t ed25519 -C "you@example.com"
ssh-keygen 会询问密钥保存到哪里,以及是否设置口令。按回车接受默认位置。
-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 上,把口令存入登录钥匙串,这样重启后 agent 会重新加载该密钥:
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
要避免反复输入口令,请启动 agent 服务并加载密钥。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: 值,你就是靠它来区分两个密钥的。参见支持的密钥类型。
密钥就绪后,把它添加到你的账户 —— 在部署任何东西之前。