# 创建、保存和删除 SSH 密钥

生成或导入 SSH 密钥时私钥仅显示一次的规则、保存方法，以及删除密钥前需要确认的实际影响范围。

在“计算 > SSH 密钥”页面可以新建、重命名和删除 SSH 密钥，供登录实例和创建实例时选用。新建密钥有两种模式：让控制台自动生成一个密钥对，或者导入一个你已经持有的公钥。

**只有“自动生成”模式会产生私钥，而这个私钥只在生成的那一刻显示一次。** 关闭弹窗之后，控制台和 API 都没有任何入口能再把它找回来——不是“藏起来了”，是彻底没有查看渠道了。点击“创建”之前，先想好私钥要存到哪里：密码管理器、加密的本地文件，或者其他你信得过的地方。

_界面示意图：SSH 密钥列表页：名称、算法、指纹列，右上角新建密钥按钮，每行的重命名和删除操作_

## 开始之前

- **权限**：你的角色需要包含 SSH 密钥管理权限。
- **保存私钥的地方**：如果打算用“自动生成”模式，提前准备好密码管理器或其他安全存储位置——私钥生成之后没有回头路。
- **一份已有公钥**（可选）：如果打算导入而不是生成，准备好 OpenSSH 格式的公钥文本（`authorized_keys` 里的单行格式）。

## 生成新密钥

1. 在“计算 > SSH 密钥”页面，点击**新建密钥**。
2. 在弹窗的名称字段中确认或修改密钥名称。控制台已经填入一个默认名称，格式类似 `ssh-key-20260829-1234`。
3. 模式选择器保持在**自动生成**（默认选中）。
4. 点击**创建**。控制台会当场生成一个 Ed25519 密钥对，弹窗随即切换为“保存你的私钥”页面，并显示警告：“私钥仅在此展示一次，关闭后将无法再次查看，请立即保存。”

_界面示意图：新建 SSH 密钥弹窗（表单阶段）：名称字段、自动生成/导入已有公钥切换按钮、创建按钮_

到这一步私钥已经生成，只是窗口还没关。剩下的步骤决定你还能不能再看到它。

5. 点击**下载私钥**，把私钥保存为文件；或者点击公钥、私钥文本框旁的复制按钮，把内容粘贴进密码管理器。
6. 勾选**我已保存好私钥**。这个复选框控制着下一步按钮是否可以点击。
7. 点击**完成**。

_界面示意图：保存私钥弹窗（展示阶段）：警告文案、公钥和私钥文本框及各自的复制按钮、下载私钥按钮、“我已保存好私钥”复选框、完成按钮_

这个弹窗不能靠点击遮罩或按 Esc 关闭，唯一出口是勾选确认后点击“完成”。这不是控制台的缺陷——私钥只有这一次展示机会，平台没有留一个能被手滑点掉的意外出口。

## 关闭弹窗之后，私钥去哪了

“关闭后无法再次查看”说的是你这一侧，容易被理解成私钥已经从系统里彻底清除。实际情况要分开看：

| 会发生什么                                                                                                                                                | 不会发生什么                                                                       |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| 关闭弹窗后，控制台和 API 都没有任何入口能再把私钥明文取回                                                                                                 | 私钥不会真的从系统里删除——服务端会以加密形式保留一份副本                           |
| 这份加密副本会被“网页控制台自动登录”功能持续复用：打开 [Web SSH](/zh-cn/compute/access/web-ssh/) 面板时，控制台按公钥指纹匹配并解密这份副本，用于免密登录 | 这份副本不会经任何接口返回给你或其他任何人——它只在服务端内部使用，从不出现在响应里 |
| 唯一能清除服务端这份副本的方法是删除这个 SSH 密钥                                                                                                         | 关闭弹窗这个动作本身不会触发服务端做任何清理，副本是否还留着和你有没有关掉弹窗无关 |

如果你需要的不只是“我这边看不到了”，而是“服务器上也不再留底”，删除对应的 SSH 密钥是唯一途径，见下文。

## 导入已有公钥

如果本地已经有一对 SSH 密钥，导入公钥不会经过私钥展示这一步——私钥全程留在你自己手里，服务端从未生成也没有持有它。

1. 在“计算 > SSH 密钥”页面，点击**新建密钥**。
2. 在弹窗的名称字段中确认或修改密钥名称。
3. 将模式选择器切换到**导入已有公钥**。
4. 在公钥文本框中粘贴 OpenSSH 格式的公钥（`authorized_keys` 里的单行格式）。
5. 点击**创建**。

导入模式的创建响应里不包含私钥字段，这条规则和“自动生成”模式的一次性展示是两回事，不要混着理解。

## 重命名 SSH 密钥

名称只是一个便于识别的标签，重命名不影响密钥本身，也不影响已经在用这条密钥的实例。名称不能留空；提交空名称时，控制台会提示：“名称不能为空”。

## 删除 SSH 密钥

> [!CAUTION]
> 删除只影响“今后能不能用它创建新实例”，不影响已经在用这把密钥登录的实例。已经把对应公钥写进
> `authorized_keys` 的实例不会因为你删除了这条 SSH
> 密钥记录而失去访问权限——这条经常被理解反。

1. 在“计算 > SSH 密钥”列表中，找到目标密钥所在行，点击**删除**。
2. 确认框标题为“删除 SSH 密钥”，正文写明：“确定要删除密钥「`{{name}}`」吗？此操作不可撤销，已使用该密钥登录的实例不受影响，但今后无法再用它创建新实例。”
3. 点击**删除**确认。

_界面示意图：删除 SSH 密钥确认框：标题、包含密钥名称的确认文案、删除按钮_

| 会发生什么                                                     | 不会发生什么                                                     |
| -------------------------------------------------------------- | ---------------------------------------------------------------- |
| 这条密钥从“创建实例时可选的 SSH 密钥”列表中消失                | 已经把对应公钥写入 `authorized_keys` 的实例不会失去访问权限      |
| 如果这条密钥是自动生成的，服务端保存的加密私钥副本会被一并清除 | 控制台不会提示你先检查有哪些实例在用这条密钥——删除前需要自己确认 |

## 创建失败时

名称留空，或者选择“导入已有公钥”模式但公钥字段留空，提交都会失败，控制台提示：“创建失败，请检查填写内容”。检查名称和公钥字段后重新提交。

> [!NOTE]
> 两步验证恢复码的可查看规则和本页描述的 SSH 私钥不一样，不要套用同一套假设。具体规则属于另一篇文档的范围，记录在 account/two-step-verification 页，目前尚未撰写。

## 相关文档

- [实例访问](/zh-cn/compute/access/)
- [使用 Web SSH](/zh-cn/compute/access/web-ssh/)
- [创建实例](/zh-cn/compute/instances/create/)
