

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

# 为服务托管用户生成 SSH 密钥
<a name="sshkeygen"></a>

您可以设置服务器以使用服务管理的身份验证方法对用户进行身份验证，其中用户名和 SSH 密钥存储在服务中。用户的公有 SSH 密钥作为用户属性上传到服务器。服务器将此密钥用作密钥标准身份验证过程的一部分。每个用户均可使用单个服务器存档多个公有 SSH 密钥。有关每个用户可以存储的密钥数量限制，请参阅中的 *Amazon Web Services 一般参考* 中的 [AWS Transfer Family 端点和配额](https://docs.aws.amazon.com//general/latest/gr/transfer-service.html)。

作为服务托管身份验证方法的替代方法，您可以使用自定义身份提供商对用户进行身份验证，或者 AWS Directory Service for Microsoft Active Directory。有关更多信息，请参阅 [使用自定义身份提供程序](custom-idp-intro.md)或 [使用微软 Active Directory 的 AWS 目录服务](directory-services-users.md)。

服务器只能使用一种方法（服务托管、目录服务或自定义身份提供程序）对用户进行身份验证，并且该方法在创建服务器后无法更改。

**Topics**
+ [在 macOS、Linux 或 Unix 系统创建 SSH 密钥](macOS-linux-unix-ssh.md)
+ [在 Microsoft Windows 上创建 SSH 密钥](windows-ssh.md)
+ [将 SSH2 密钥转换为 SSH 公钥格式](convert-ssh2-public-key.md)

# 在 macOS、Linux 或 Unix 系统创建 SSH 密钥
<a name="macOS-linux-unix-ssh"></a>

在 macOS、Linux 或 Unix 操作系统中，您可以使用 `ssh-keygen` 命令创建 SSH 公钥和 SSH 私钥（也称为密钥对）。

**注意**  
在以下示例中，我们未指定密码：在这种情况下，该工具会要求您输入密码，然后重复密码进行验证。创建密码可以更好地保护您的私钥，还可以提高系统整体安全性。您无法恢复密码：如果您忘记了密码，则必须创建新的密钥。  
但是，如果要生成服务器主机密钥，则*必须*通过在命令中指定 `-N ""` 选项（或者在出现提示时按 **Enter** 两次）指定空密码，原因是 Transfer Family 服务器无法在启动时请求密码。

**若要在 macOS、Linux 或 Unix 操作系统上创建 SSH 密钥**

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

1. AWS Transfer Family 接受 RSA-、ECDSA-和 ED25519-格式的密钥。根据您生成的密钥对类型选择相应的命令。

   **提示**：`key_name`替换为 SSH 密钥对文件的实际名称。
   + 生成 RSA 4096 位密钥对：

     ```
     ssh-keygen -t rsa -b 4096 -f key_name
     ```
   + 若要生成 ECDSA 521 位密钥对（ECDSA 大小为 256、384 和 521），请执行以下操作：

     ```
     ssh-keygen -t ecdsa -b 521 -f key_name
     ```
   + 要生成 ED25519 密钥对，请执行以下操作：

     ```
     ssh-keygen -t ed25519 -f key_name
     ```

   下面是 `ssh-keygen` 输出的示例。

   ```
   ssh-keygen -t rsa -b 4096 -f key_name
   Generating public/private rsa key pair.
   
   Enter passphrase (empty for no passphrase): 
   Enter same passphrase again:
   Your identification has been saved in key_name.
   Your public key has been saved in key_name.pub.
   The key fingerprint is:
   SHA256:8tDDwPmanTFcEzjTwPGETVWOGW1nVz+gtCCE8hL7PrQ bob.amazon.com
   The key's randomart image is:
   +---[RSA 4096]----+
   |    . ....E      |
   | .   = ...       |
   |. . . = ..o      |
   | . o +  oo =     |
   |  + =  .S.= *    |
   | . o o ..B + o   |
   |     .o.+.* .    |
   |     =o*+*.      |
   |    ..*o*+.      |
   +----[SHA256]-----+
   ```

   **提示**：如上所示运行`ssh-keygen`命令时，它会将公钥和私钥创建为当前目录中的文件。

   您的 SSH 密钥对现已准备就绪，可以使用。按照步骤 3 和 4 为服务托管用户存储 SSH 公钥。这些用户在 Transfer Family 服务器端点上传输文件时使用这些密钥。

1. 导航到 `key_name.pub` 文件并打开它。

1. 复制文本并将其粘贴至服务托管用户的 **SSH 公钥**中。

   1. 打开 AWS Transfer Family 控制台 [https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)，然后从导航窗格中选择 “**服务器**”。

   1. 在**服务器**页面，选择包含要更新用户服务器的**服务器 ID**。

   1. 选择要为其添加公钥的目标用户。

   1. 在 **SSH 公钥**窗格，选择**添加 SSH 公钥**。  
![\[AWS Transfer Family 控制台，显示选定用户的用户详细信息。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/edit-user-add-key-01.png)

   1. 将您生成的公钥文本粘贴至 SSH 公钥文本框中，然后选择**添加密钥**。  
![\[AWS Transfer Family 控制台，显示用于添加公钥的 “添加密钥” 页面。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/edit-user-add-key-02.png)

      新密钥列于 SSH 公钥窗格。  
![\[AWS Transfer Family 控制台，在 SSH 公钥部分显示新添加的公钥。\]](http://docs.aws.amazon.com/zh_cn/transfer/latest/userguide/images/edit-user-add-key-03.png)

# 在 Microsoft Windows 上创建 SSH 密钥
<a name="windows-ssh"></a>

Windows 将 OpenSSH 作为一项内置功能包括在内，你可以用它来生成与 Linux 或 macOS 相同格式的 SSH 密钥。或者，你可以使用第三方工具，比如 PuTTY 的密钥生成器 (PuTTYgen)。

## 使用 Windows 内置的 OpenSSH
<a name="windows-openssh"></a>

Windows 的最新版本默认包含 OpenSSH。你可以使用与 macOS/Linux 一节中所述相同的`ssh-keygen`命令：

1. 打开 Windows PowerShell 或命令提示符。

1. 根据要生成的密钥类型运行以下命令之一：
   + 生成 RSA 4096 位密钥对：

     ```
     ssh-keygen -t rsa -b 4096 -f key_name
     ```
   + 要生成 ECDSA 521 位密钥对，请执行以下操作：

     ```
     ssh-keygen -t ecdsa -b 521 -f key_name
     ```
   + 要生成 ED25519 密钥对，请执行以下操作：

     ```
     ssh-keygen -t ed25519 -f key_name
     ```

1. 按照与该 macOS/Linux 部分相同的步骤将您的公钥上传到 AWS Transfer Family。

## 使用 PuTTYgen （第三方工具）
<a name="windows-puttygen"></a>

某些适用于 Windows 的第三方 SSH 客户端（例如 PuTTY）使用不同的密钥格式。Putty 使用私`PPK`钥的格式。如果你使用的是 Putty 或 WinSCP 等相关工具，你可以使用 Pu TTYgen 来创建这种格式的密钥。

**注意**  
如果您向 WinSCP 提供的私有密钥文件不是 `.ppk` 格式，该客户端会为您将密钥转换为 `.ppk` 格式。

有关使用 Pu 创建 SSH 密钥的教程TTYgen，请访问 [SSH.com 网站](https://www.ssh.com/ssh/putty/windows/puttygen)。

# 将 SSH2 密钥转换为 SSH 公钥格式
<a name="convert-ssh2-public-key"></a>

 AWS Transfer Family 仅接受 SSH 格式的公钥。如果您有 SSH2 公钥，则需要对其进行转换。 SSH2 公钥的格式如下：

```
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20160402"
AAAAB3NzaC1yc2EAAAABJQAAAgEAiL0jjDdFqK/kYThqKt7THrjABTPWvXmB3URI
:
:
---- END SSH2 PUBLIC KEY ----
```

SSH 公钥的格式如下：

```
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAA...
```

运行以下命令将格式的公钥转换为 SSH SSH2 格式的公钥。*ssh2-key*替换为 SSH2 密钥的*ssh-key*名称和 SSH 密钥的名称。

```
ssh-keygen -i -f ssh2-key.pub > ssh-key.pub
```