

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

# 管理启用 SFTP 的服务器的主机密钥
<a name="configuring-servers-change-host-key"></a>

服务器主机密钥是 Transfer Family 服务器使用的私钥，用于向呼叫者提供唯一身份，并保证它是正确的服务器。这种保证是通过调用者的`known_hosts`文件中存在正确的公钥来强制执行的。（该`known_hosts`文件是大多数 SSH 客户端使用的一项标准功能，用于存储您所连接的服务器的公钥。） 您可以通过为服务器运行来检索与您的服务器主机密钥相对应`ssh-keyscan`的公钥。

**重要**  
意外更改服务器的主机密钥会导致中断。根据您的 SFTP 客户端的配置方式，它可能会立即失败，并显示不存在可信主机密钥的消息，或者出现威胁性提示。如果有用于自动连接的脚本，它们很可能也会失败。

默认情况下， AWS Transfer Family 会为启用 SFTP 的服务器生成主机密钥。您可以导入服务器主机密钥以保留主机身份并避免更新客户端信任存储库。 [何时导入主机密钥](#host-key-import-use-cases)列出了您可能想要这样做的几个原因。如果您不提供主机密钥，则会为您生成新的密钥。

AWS Transfer Family 支持多个不同类型的主机密钥（RSA、ECDSA 和 ED25519），以提供与更广泛的客户端主机签名算法的兼容性。**不同的密钥类型支持特定的算法：RSA 密钥启用 rsa-\$1 算法，ECD **SA 密钥启用 ecdsa-\$1** 算法，密钥启用 ed **25519** 算法。 ED25519 **在创建服务器时规划密钥类型，因为在客户端开始与服务器交互之后引入其他密钥类型可能会对某些客户端造成干扰，并且可能与替换现有的主机密钥一样成问题。

为避免用户再次被提示验证启用了 SFTP 的服务器的真实性，请将本地服务器的主机密钥导入到启用了 SFTP 的服务器。这样做还可以防止您的用户收到有关潜在 man-in-the-middle攻击的警告。

作为一项额外的安全措施，您也可以定期轮换主机密钥。有关更多信息，请参阅 [轮换服务器主机密钥](server-host-key-rotate.md)。

**注意**  
服务器主机密钥由支持 SFTP 协议的服务器使用。

## 何时导入主机密钥
<a name="host-key-import-use-cases"></a>

虽然 AWS Transfer Family 可以自动生成主机密钥，但在以下几种情况下，导入自己的主机密钥会带来操作上的好处：
+ *服务器迁移*-您正在从现有服务器迁移到 AWS Transfer Family 并希望避免更新现有客户端的客户端信任存储库（`known_hosts`文件）。
+ *灾难恢复和故障转移*-您有多 AWS Transfer Family 台服务器（例如，一台位于美国东部（俄亥俄州），一台位于美国西部（俄勒冈）），它们共享相同的公有 DNS 名称。在两台服务器上使用相同的主机密钥可确保无缝故障转移，而不会出现客户端身份验证故障。
+ *操作连续性*-您希望主机密钥材料将来可用于其他服务器（AWS Transfer Family 或其他服务器），以便在整个基础架构中保持一致的服务器身份。
+ *算法控制*-您希望通过提供更多主机密钥算法来提高客户端兼容性，或者您想通过仅提供与特定算法兼容的密钥来控制客户端可以使用的算法。

以下主题提供了管理服务器主机密钥的详细过程：
+ [添加其他的服务器主机密钥](server-host-key-add.md)-向服务器添加其他主机密钥
+ [删除服务器主机密钥](server-host-key-delete.md)-从服务器上移除主机密钥
+ [轮换服务器主机密钥](server-host-key-rotate.md)-轮换主机密钥以增强安全性
+ [其他服务器主机密钥信息](server-host-key-other.md)-查看和管理主机密钥详细信息

# 添加其他的服务器主机密钥
<a name="server-host-key-add"></a>

在 AWS Transfer Family 控制台上，您可以添加其他服务器主机密钥。添加其他不同格式的主机密钥对于在客户端连接到服务器时识别服务器以及改善您的安全配置文件非常适用。例如，如果您的原始密钥是 RSA 密钥，则可以添加其他 ECDSA 密钥。

**注意**  
SFTP 客户端将使用配置中与密钥算法相匹配的最旧密钥进行连接。每种密钥类型（RSA、ECDSA 或 ED25519）的最旧密钥是该类型服务器的活动密钥。

**Transfer Family 服务器有多种类型的主机密钥时的安全注意事项**  
如果服务器有多种类型的主机密钥，则 SFTP 客户端可以按类型分配首选项。因此，当服务器有 RSA、ECDSA 和 ED25519 主机密钥时，选择将由类型的首选项决定。

现代 SFTP 客户端更喜欢使用 ECDSA 和 ED25519 主机密钥（如果它们存在）。如果要在服务器以前只有 RSA ED25519 密钥的情况下添加 ECDSA 或密钥，这一点就变得很重要。添加新的 ECDSA 或 ED25519 密钥可能会显示为对客户端的安全警告。

对于客户来说，密钥将显示为已更改，而实际上它并未更改：新密钥是在现有的 RSA 密钥之外添加的。如果您决定添加新类型的服务器主机密钥，请记住这一点。

**要添加其他的服务器主机密钥**

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

1. 在左侧导航窗格中，选择**服务器**，然后选择使用 SFTP 协议的服务器。

1. 在服务器详细信息页面上，向下滚动到**服务器主机密钥**部分。  
![\[服务器主机密钥控制台部分。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/server-host-keys.png)

1. 选择**添加主机密钥**。

   将显示**添加服务器主机密钥**页面。

1. 在 “**服务器主机密钥**” 部分，输入 RSA、ECDSA 或 ED25519 私钥，当客户端通过支持 SFTP 的服务器连接到服务器时，该密钥用于识别您的服务器。
**注意**  
创建服务器主机密钥时，请务必指定 `-N ""`（无密码）。有关如何生成密钥对的详细信息，请参阅 [在 macOS、Linux 或 Unix 系统创建 SSH 密钥](macOS-linux-unix-ssh.md)。

1. （可选）添加描述以区分多个服务器主机密钥。您可以为密钥添加标签。

1. 选择**添加密钥**。您将返回到**服务器详细信息**页面。

要使用 AWS Command Line Interface (AWS CLI) 添加主机密钥，请使用 [ImportHostKey](https://docs.aws.amazon.com/transfer/latest/APIReference/API_ImportHostKey)API 操作并提供新的主机密钥。如果创建新的启用 SFTP 的服务器，则在 [CreateServer](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateServer) API 操作中提供主机密钥作为参数。您也可以 AWS CLI 使用更新现有主机密钥的描述。

以下示例`import-host-key` AWS CLI 命令导入指定启用 SFTP 的服务器的主机密钥。

```
aws transfer import-host-key --description key-description --server-id your-server-id --host-key-body file://my-host-key 
```

# 删除服务器主机密钥
<a name="server-host-key-delete"></a>

在 AWS Transfer Family 控制台上，您可以删除服务器主机密钥。

**要删除服务器主机密钥**

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

1. 在左侧导航窗格中，选择**服务器**，然后选择使用 SFTP 协议的服务器。

1. 在服务器详细信息页面上，向下滚动到**服务器主机密钥**部分。  
![\[服务器主机密钥控制台部分。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/server-host-keys.png)

1. 在**服务器主机密钥**部分中，选择一个密钥，然后在**操作**下选择**删除**。

1. 在出现的确认对话框中，输入单词 **delete**，然后选择**删除**以确认要删除主机密钥。

主机密钥已从**服务器**页面中删除。

要使用删除主机密钥 AWS CLI，请使用 [https://docs.aws.amazon.com/transfer/latest/APIReference/API_DeleteHostKey](https://docs.aws.amazon.com/transfer/latest/APIReference/API_DeleteHostKey)API 操作并提供服务器 ID 和主机密钥 ID。

以下示例`delete-host-key` AWS CLI 命令删除指定启用 SFTP 的服务器的主机密钥。

```
aws transfer delete-host-key --server-id your-server-id --host-key-id your-host-key-id
```

# 轮换服务器主机密钥
<a name="server-host-key-rotate"></a>

您可以定期轮换服务器主机密钥。本主题介绍服务器如何选择要应用的密钥，以及轮换这些密钥的过程。

## 客户端如何选择服务器主机密钥
<a name="server-key-behavior"></a>

Transfer Family 选择应用哪个服务器密钥的方式取决于 SFTP 客户端的条件，如下所述。假设有一个较旧的密钥和一个较新的密钥。
+ SFTP 客户端之前没有服务器的公用主机密钥。客户端首次连接到服务器时，会发生以下任一情况：
  + 如果配置为连接失败，则客户端会导致连接失败。
  + 或者，客户端选择与可能的可用算法相匹配的第一个密钥，并询问用户该密钥是否可信。如果是，则客户端会自动更新`known_hosts`文件（或客户端用来记录信任决策的任何本地配置文件或资源）并输入该密钥。
+ SFTP 客户端`known_hosts`的文件中有一个较旧的密钥。即使存在较新的密钥，客户端也倾向于将此密钥用于此密钥的算法或其他算法。这是因为客户端对其`known_hosts`文件中的密钥具有更高的信任度。
+ SFTP 客户端的密钥文件中包含新密`known_hosts`钥（采用任何可用的算法）。客户端会忽略旧密钥，因为它们不受信任，而是使用新密钥。
+ SFTP 客户端`known_hosts`的文件中包含两个密钥。客户端通过索引选择与服务器提供的可用密钥列表相匹配的第一个密钥。

Transfer Family 更喜欢 SFTP 客户端在其`known_hosts`文件中包含所有密钥，因为这样在连接到 Transfer Family 服务器时可以获得最大的灵活性。密钥轮换基于这样一个事实，即同一个 Transfer Family 服务器`known_hosts`的文件中可能存在多个条目。

## 轮换服务器主机密钥程序
<a name="server-key-rotate-procedure"></a>

例如，假设您已将以下一组服务器主机密钥添加到 Transfer Family 服务器中。


**服务器主机密钥**  

| 主机密钥类型 | 添加到服务器的日期 | 
| --- | --- | 
| RSA | 2020 年 4 月 1 日 | 
| ECDSA | 2020 年 2 月 1 日 | 
| ED25519 | 2019 年 12 月 1 日 | 
| RSA | 2019 年 10 月 1 日 | 
| ECDSA | 2019 年 6 月 1 日 | 
| ED25519 | 2019 年 3 月 1 日 | 

**要轮换服务器主机密钥**

1. 添加新的服务器主机密钥。有关此过程的说明，请参阅 [添加其他的服务器主机密钥](server-host-key-add.md)。

1. 删除您之前添加的一个或多个相同类型的主机密钥。有关此过程的说明，请参阅 [删除服务器主机密钥](server-host-key-delete.md)。

1. 所有按键均可见，并且可以处于活动状态，具体取决于前面中描述的行为[客户端如何选择服务器主机密钥](#server-key-behavior)。

# 其他服务器主机密钥信息
<a name="server-host-key-other"></a>

您可以选择主机密钥以显示该密钥的详细信息。

![\[主机密钥详细信息控制台屏幕。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/server-host-keys-details.png)


您可以删除主机密钥，也可以从服务器详细信息屏幕上的**操作**菜单中编辑其描述。选择主机密钥，然后从菜单中选择相应的操作。

![\[服务器主机密钥操作菜单。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/server-host-keys-actions.png)
