跳到主要内容

生成密钥

在实例上打开 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 文件,绝不要粘贴另一个

没有 .pub 扩展名的那个文件是你的私钥,它以 -----BEGIN OPENSSH PRIVATE KEY----- 开头。如果你曾经把它粘贴到某个表单、聊天或工单里,请生成一对新密钥并删除旧的。

复制公钥

平台命令
macOSpbcopy < ~/.ssh/id_ed25519.pub
Linux,X11xclip -selection clipboard < ~/.ssh/id_ed25519.pub
Linux,Waylandwl-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: 值,你就是靠它来区分两个密钥的。参见支持的密钥类型

密钥就绪后,把它添加到你的账户 —— 在部署任何东西之前。