

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 轮换 SSH 密钥
<a name="keyrotation"></a>

出于安全原因，我们推荐轮换 SSH 密钥的最佳安全实践。通常，此轮换被指定为安全策略的一部分，并以某种自动化的方式实现。根据安全级别，对于高度敏感的通信，SSH 密钥对可能只使用一次。这样做可以消除因存储密钥而导致的任何风险。但是，更常见的做法是将 SSH 凭证存储一段时间，并设置一个不会给用户带来过多负担的间隔。通常，时间间隔为 3 个月。

**注意**  
有关使用基础架构即代码的自动 SSH 密钥轮换，请参阅[Transfer Family terraform 模块](terraform.md)。

有两种方法用于执行 SSH 密钥轮换：
+ 在控制台上，您可以上传新的 SSH 公钥和删除现有 SSH 公钥。
+ 使用 API，您可以使用 AP [DeleteSshPublicKey](https://docs.amazonaws.cn//transfer/latest/APIReference/API_DeleteSshPublicKey.html)I 删除用户的安全外壳 (SSH) 公钥，使用 [ImportSshPublicKey](https://docs.amazonaws.cn/transfer/latest/APIReference/API_ImportSshPublicKey.html)API 向用户账户添加新的安全外壳 (SSH) 公钥，从而更新现有用户。

------
#### [ Console ]

**若要控制台中执行密钥轮换**

1. 打开 Amazon Transfer Family 控制台，网址为[https://console.aws.amazon.com/transfer/](https://console.amazonaws.cn/transfer/)。

1. 导航至**服务器**页面。

1. 选择**服务器 ID** 列中的标识符以查看**服务器详细信息**页面。

1. 在**用户**下，选中要轮换其 SSH 公钥用户的复选框，然后选择**操作**，然后选择**添加密钥**以查看**添加密钥**页面。

   或者

   选择用户名以查看**用户详细信息**页面，然后选择**添加 SSH 公钥** 以查看**添加密钥**页面。

1. 输入新的 SSH 公钥并选择**添加密钥**。
**重要**  
SSH 公有密钥格式取决于您生成的密钥的类型。  
RSA 密钥的格式为 `ssh-rsa string`。
对于 ED25519 密钥，格式为`ssh-ed25519 string`。
对于 ECDSA 密钥，`ecdsa-sha2-nistp256` 字符串为 `ecdsa-sha2-nistp384` 或 `ecdsa-sha2-nistp521`，具体取决于您生成的密钥的大小。然后，先是 `string`，后跟开头字符串，这与其他秘钥类型类似。

   您将返回**用户配置**屏幕，您刚刚输入的新 SSH 公钥将出现在 **SSH 公钥**部分。

1. 选中要删除的旧密钥旁边的复选框，然后选择**删除**。

1. 输入单词 `delete` 以确认删除操作，然后选择**删除**。

------
#### [ API ]

**若要使用 API 执行密钥轮换**

1. 在 macOS、Linux 或 Unix 操作系统，打开命令终端。

1.  输入以下命令，以检索要删除的 SSH 密钥。若要使用此命令，请将 `serverID` 替换为您的 Transfer Family 服务器的服务器 ID，然后将 `username` 替换为您的用户名。

   ```
   aws transfer describe-user --server-id='serverID' --user-name='username'
   ```

   该命令返回有关此用户的详细信息。复制 `"SshPublicKeyId":` 字段的内容。您将需要稍后在此程序中输入此值。

   ```
   "SshPublicKeys": [ { "SshPublicKeyBody": "public-key", "SshPublicKeyId": "keyID",
      "DateImported": 1621969331.072 } ],
   ```

1.  接下来，为您的用户导入新 SSH 密钥。在 提示符中，输入以下命令。若要使用此命令，请将 `serverID` 替换为您的 Transfer Family 服务器的服务器 ID，将 `public-key` 替换为您的用户名，并将 `username` 替换为新公钥的指纹。

   ```
   aws transfer import-ssh-public-key --server-id='serverID' --user-name='username'
      --ssh-public-key-body='public-key'
   ```

   ``如果命令成功，则不返回任何输出。

1.  最后通过运行以下命令删除旧密钥。若要使用此命令，将 `serverID` 替换为 Transfer Family 服务器的服务器 ID，将 `username` 替换为您的用户名，将 `keyID-from-step-2` 替换为您在此程序第 2 步中复制的秘钥 ID 值。

   ```
   aws transfer delete-ssh-public-key --server-id='serverID' --user-name='username'
      --ssh-public-key-id='keyID-from-step-2'
   ```

1. （可选）要确认旧密钥是否存在，请重复第 2 步。

------