

# 使用 SSH 连接到 Linux 实例
<a name="connect-to-linux-instance"></a>

有许多方法可以使用 SSH 连接到 Linux 实例。有些方法会因发起连接的本地计算机的操作系统而有所不同。其他方法基于浏览器，例如 EC2 Instance Connect 或 AWS Systems Manager Session Manager，可以在任何计算机上使用。您可以使用 SSH 连接到 Linux 实例并运行命令，也可以使用 SSH 在本地计算机和实例之间传输文件。

在使用 SSH 连接到 Linux 实例之前，请先完成以下先决条件：
+ 检查您的实例是否通过了状态检查。可能需要花几分钟时间，实例才能准备好接受连接请求。有关更多信息，请参阅 [查看状态检查](viewing_status.md)。
+ 确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。有关更多信息，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。
+ [获取所需的实例详细信息](connection-prereqs-general.md#connection-prereqs-get-info-about-instance).
+ [查找私有密钥并设置权限](connection-prereqs-general.md#connection-prereqs-private-key).
+ [（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint).

然后，选择以下某个选项来使用 SSH 连接到 Linux 实例。
+ [使用 SSH 客户端进行连接](connect-linux-inst-ssh.md)
+ [使用 PuTTY 进行连接](connect-linux-inst-from-windows.md) 
+ [使用 SCP 传输文件](linux-file-transfer-scp.md)

如果无法连接到实例，并且需要进行问题排查，请参阅[排查 Amazon EC2 Linux 实例的连接问题](TroubleshootingInstancesConnecting.md)。

# 使用 SSH 客户端连接到 Linux 实例
<a name="connect-linux-inst-ssh"></a>

使用 Secure Shell（SSH）可以从本地计算机连接到 Linux 实例。有关其他选项的更多信息，请参阅[连接到您的 EC2 实例](connect.md)。

**注意**  
如果您在尝试连接到您的实例时收到错误，请确保您的实例满足所有 [SSH 连接先决条件](#ssh-prereqs-linux-from-linux-macos) 要求。如果它满足所有先决条件，但您仍然无法连接到 Linux 实例，请参阅[排查 Amazon EC2 Linux 实例的连接问题](TroubleshootingInstancesConnecting.md)。

**Topics**
+ [

## SSH 连接先决条件
](#ssh-prereqs-linux-from-linux-macos)
+ [

## 使用 SSH 客户端连接到 Linux 实例
](#connect-linux-inst-sshClient)

## SSH 连接先决条件
<a name="ssh-prereqs-linux-from-linux-macos"></a>

使用 SSH 连接到 Linux 实例之前，请先完成以下任务。

**完成一般先决条件。**  
+ 检查您的实例是否通过了状态检查。可能需要花几分钟时间，实例才能准备好接受连接请求。有关更多信息，请参阅 [查看状态检查](viewing_status.md)。
+ [获取所需的实例详细信息](connection-prereqs-general.md#connection-prereqs-get-info-about-instance).
+ [查找私有密钥并设置权限](connection-prereqs-general.md#connection-prereqs-private-key).
+ [（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint).

**允许来自您 IP 地址的入站 SSH 流量。**  
确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。有关更多信息，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。

**在本地计算机上安装 SSH 客户端（如果需要）。**  
您的本地计算机可能已默认安装了 SSH 客户端。在终端窗口输入以下命令可以验证该情况。如果计算机无法识别该命令，则必须安装 SSH 客户端。  

```
ssh
```
以下是适用于 Windows 的一些可能选项。如果计算机运行别的操作系统，请参阅相应操作系统的文档来了解 SSH 客户端选项。

## 在 Windows 系统上安装 OpenSSH
<a name="openssh"></a>

在 Windows 上安装 OpenSSH 后，即可使用 SSH 从 Windows 计算机连接到 Linux 实例。开始操作之前，务必确认已满足以下要求。

**Windows 版本**  
计算机上的 Windows 版本必须是 Windows Server 2019 或更高版本。  
若为较早版本的 Windows，请改为下载并安装 [Win32-OpenSSH](https://github.com/PowerShell/Win32-OpenSSH/wiki)。

**PowerShell 要求**  
若要在 Windows 操作系统上使用 PowerShell 安装 OpenSSH，您必须运行 PowerShell 版本 5.1 或更高版本，并且您的账户必须是内置管理员组的成员。在 PowerShell 中运行 `$PSVersionTable.PSVersion` 以查看 PowerShell 版本。  
若要查看您是否是内置管理员组的成员，请运行以下 PowerShell 命令：  

```
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
```
如果您是内置管理员组的成员，则输出为 `True`。

若要使用 PowerShell 安装适用于 Windows 的 OpenSSH，请运行以下 PowerShell 命令。

```
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
```

下面是示例输出。

```
Path          :
Online        : True
RestartNeeded : False
```

若要使用 PowerShell 将 OpenSSH 从 Windows 卸载，请运行以下 PowerShell 命令。

```
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
```

下面是示例输出。

```
Path          :
Online        : True
RestartNeeded : True
```

## 安装适用于 Linux 的 Windows 子系统（WSL）
<a name="WSL"></a>

在 Windows 上安装 WSL 后，即可使用 Linux 命令行工具（例如 SSH 客户端）从 Windows 计算机连接到 Linux 实例。

按照[在 EC2 Windows 实例上安装适用于 Linux 的 Windows 子系统](install-wsl-on-ec2-windows-instance.md)中的说明进行操作。如果您按照 Microsoft 安装指南中的说明进行操作，他们会安装 Linux 的 Ubuntu 发行版。如果愿意，您可以安装不同的 Linux 发行版。

在 WSL 终端窗口中，将 `.pem` 文件（适用于您在启动时为实例指定的密钥对）从 Windows 复制到 WSL。记下在连接到实例时要使用的 WSL 上的 `.pem` 文件的完全限定路径。有关如何指定 Windows 硬盘的路径的信息，请参阅[如何访问我的 C 驱动器？](https://learn.microsoft.com/en-us/windows/wsl/faq#how-do-i-access-my-c--drive-)。

```
cp /mnt/<Windows drive letter>/path/my-key-pair.pem ~/WSL-path/my-key-pair.pem
```

有关卸载 Windows Subsystem for Linux 的信息，请参阅[如何卸载 WSL 发行版？](https://learn.microsoft.com/en-us/windows/wsl/faq#how-do-i-uninstall-a-wsl-distribution-)

## 使用 SSH 客户端连接到 Linux 实例
<a name="connect-linux-inst-sshClient"></a>

通过以下过程使用 SSH 客户端连接到您的 Linux 实例。

**使用 SSH 客户端连接到实例**

1. 在计算机上打开终端窗口。

1. 使用 **ssh** 命令连接到实例。此时需要用到在先决条件中收集的有关实例的详细信息。例如，您需要私有密钥（`.pem` 文件）的位置、用户名以及公有 DNS 名称或 IPv6 地址。以下是命令示例。
   + （公有 DNS）要使用公有 DNS 名称，请输入以下命令。

     ```
     ssh -i /path/key-pair-name.pem instance-user-name@instance-public-dns-name
     ```
   + （IPv6）或者，如果实例具有 IPv6 地址，请输入以下命令来使用 IPv6 地址。

     ```
     ssh -i /path/key-pair-name.pem instance-user-name@2001:db8::1234:5678:1.2.3.4
     ```

   以下为响应示例。

   ```
   The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (198-51-100-1)' can't be established.
   ECDSA key fingerprint is l4UB/neBad9tvkgJf1QZWxheQmR59WgrgzEimCG6kZY.
   Are you sure you want to continue connecting (yes/no)?
   ```

1. （可选）验证安全警报中的指纹是否与该指纹相匹配。如果这些指纹不匹配，则表示有人可能在试图实施中间人攻击。如果匹配，请继续到下一步。有关更多信息，请参阅[获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint)。

1. 输入 **yes**。

   您会看到如下响应：

   ```
   Warning: Permanently added 'ec2-198-51-100-1.compute-1.amazonaws.com' (ECDSA) to the list of known hosts.
   ```

# 使用 PuTTY 连接到 Linux 实例
<a name="connect-linux-inst-from-windows"></a>

适用于 Windows 的免费 SSH 客户端 PuTTY 可用于连接 Linux 实例。

如果运行的是 Windows Server 2019 或更高版本，建议使用 OpenSSH（这是一款使用 SSH 协议进行远程登录的开源连接工具）。

**注意**  
如果您在尝试连接到您的实例时收到错误，请确保您的实例满足所有 [SSH 连接先决条件](connect-linux-inst-ssh.md#ssh-prereqs-linux-from-linux-macos) 要求。如果它满足所有先决条件，但您仍然无法连接到 Linux 实例，请参阅[排查 Amazon EC2 Linux 实例的连接问题](TroubleshootingInstancesConnecting.md)。

**Topics**
+ [

## 前提条件
](#putty-prereqs)
+ [使用 PuTTYgen 转换私有密钥](#putty-private-key)
+ [

## 连接到您的 Linux 实例
](#putty-ssh)

## 前提条件
<a name="putty-prereqs"></a>

使用 PuTTY 连接到 Linux 实例之前，请先完成以下任务。

**完成一般先决条件。**  
+ 检查您的实例是否通过了状态检查。可能需要花几分钟时间，实例才能准备好接受连接请求。有关更多信息，请参阅 [查看状态检查](viewing_status.md)。
+ [获取所需的实例详细信息](connection-prereqs-general.md#connection-prereqs-get-info-about-instance).
+ [查找私有密钥并设置权限](connection-prereqs-general.md#connection-prereqs-private-key).
+ [（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint).

**允许来自您 IP 地址的入站 SSH 流量。**  
确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。有关更多信息，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。

**在本地计算机上安装 PuTTY（如果需要）。**  
从 [PuTTY 下载页面](https://www.chiark.greenend.org.uk/~sgtatham/putty/)下载 PuTTY 并安装。如果您安装的是早期版本的 PuTTY，建议您下载最新版本。确保安装整个套件。

**使用 PuTTYgen 将私有密钥转换为 PPK 格式。**  
必须指定启动实例时指定的密钥对的私有密钥。如果创建了.pem 格式的私有密钥，则必须将其转换为 PPK 文件，才能与 PuTTY 一起使用。找到私有密钥（.pem 文件），然后按照[使用 PuTTYgen 转换私有密钥](#putty-private-key)中的步骤操作。

## （可选）使用 PuTTYgen 转换私有密钥
<a name="putty-private-key"></a>

PuTTY 自身并不支持适用于 SSH 密钥的 PEM 格式。PuTTY 提供一种名为 PuTTYgen 的工具，该工具可以将 PEM 密钥转换为 PuTTY 所需的 PPK 格式。如果使用 PEM 格式而非 PPK 格式创建了密钥，则必须将私有密钥（.pem 文件）转换为此格式（.ppk 文件），才能与 PuTTY 一起使用。

**将私有密钥 从 PEM 格式转换为 PPK 格式**

1. 从 **Start (开始)** 菜单中，依次选择 **All Programs (所有程序)**、**PuTTY**、**PuTTYgen**。

1. 在 **Type of key to generate** 下，选择 ** RSA**。如果您的 PuTTYgen 版本不包含此选项，请选择 **SSH-2 RSA**。  
![\[PuTTYgen 中的 RSA 密钥。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/puttygen-key-type.png)

1. 选择 **Load**。默认情况下，PuTTYgen 仅显示扩展名为 `.ppk` 的文件。要找到您的 `.pem` 文件，请选择显示所有类型的文件的选项。  
![\[选择所有文件类型。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/puttygen-load-key.png)

1. 选择在启动实例时指定的密钥对的 `.pem` 文件，然后选择**打开**。PuTTYgen 显示一个通知，即 `.pem` 文件已导入成功。选择 **OK (确定)**。

1. 要以 PuTTY 可以使用的格式保存密钥，请选择 **Save private key (保存私有密钥)**。PuTTYgen 显示一条关于在没有密码的情况下保存密钥的警告。选择**是**。
**注意**  
私有密钥上的密码提供额外一层保护。即使发现了您的私有密钥，也不能在没有密码的情况下使用该密钥。使用密码的缺点是自动化更难实现，因为需要人工干预以登录到实例或将文件复制到实例中。

1. 为密钥指定您用于密钥对的相同名称（例如 `key-pair-name`）并选择 **Save (保存)**。PuTTY 会自动添加 `.ppk` 文件扩展名。

您的私有密钥格式现在是正确的 PuTTY 使用格式了。您现在可以使用 PuTTY 的 SSH 客户端连接到实例。

## 连接到您的 Linux 实例
<a name="putty-ssh"></a>

通过以下过程使用 PuTTY 连接到您的 Linux 实例。您需要使用为私有密钥创建的 `.ppk` 文件。有关更多信息，请参阅上一个部分中的[（可选）使用 PuTTYgen 转换私有密钥](#putty-private-key)。如果您在尝试连接到实例时收到错误，请参阅 [排查 Amazon EC2 Linux 实例的连接问题](TroubleshootingInstancesConnecting.md)。

**最后测试版本** – PuTTY .78

**使用 PuTTY 连接到您的实例**

1. 启动 PuTTY（从**开始**菜单中，搜索 **PuTTY**，然后选择**打开**）。

1. 在 **Category** 窗格中，选择 **Session** 并填写以下字段：

   1. 在**主机名**框中，执行以下操作之一：
      + （公有 DNS）要使用实例的公有 DNS 名称进行连接，请输入 *instance-user-name*@*instance-public-dns-name*。
      + （IPv6）或者，如果实例具有 IPv6 地址，要使用实例的 IPv6 地址进行连接，请输入 *instance-user-name*@*2001:db8::1234:5678:1.2.3.4*。

      有关如何获取实例的用户名以及实例的公有 DNS 名称或 IPv6 地址的信息，请参阅[获取所需的实例详细信息](connection-prereqs-general.md#connection-prereqs-get-info-about-instance)。

   1. 确保**端口**值为 22。

   1. 在**连接类型**下，选择 **SSH**。  
![\[PuTTY 配置 – 会话。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/putty-session-config.png)

1. (可选) 您可以配置 PuTTY 以定期自动发送“保持连接”数据以将会话保持活动状态。要避免由于会话处于不活动状态而与实例断开连接，这是非常有用的。在**类别** 窗格中，选择**连接**，然后在 **keepalives 之间的秒数**中输入所需的间隔。例如，如果您的会话在处于不活动状态 10 分钟后断开连接，请输入 180 以将 PuTTY 配置为每隔 3 分钟发送一次保持活动数据。

1. 在**类别**窗格中，依次展开**连接**、**SSH** 和 **Auth**。选择**凭证**。

1. 在**用于身份验证的私有密钥文件**旁，选择**浏览**。在**选择私有密钥文件**对话框中，选择您为密钥对生成的 `.ppk` 文件。您可以双击该文件，也可以在**选择私有密钥文件**对话框中选择**打开**。

1. （可选）如果打算在此会话后再次连接到此实例，则可以保存此会话信息以便日后使用。在**类别**窗格中，选择**会话**。在**已保存的会话**中输入会话名称，然后选择**保存**。

1. 要连接到实例，请选择**打开**。

1. 如果这是第一次连接到该实例，PuTTY 将显示安全警报对话框，以询问您是否信任要连接到的主机。

   1. (可选) 验证安全警报对话框中的指纹是否与您之前在 [（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint) 中获得的指纹相匹配。如果这些指纹不匹配，则表示有人可能在试图实施“中间人”攻击。如果匹配，请继续到下一步。

   1. 选择 **Accept (接受)**。将打开一个窗口，并且您连接到实例。
**注意**  
如果您在将私有密钥转换成 PuTTY 格式时指定了密语，当您登录到实例时，您必须提供该密语。

如果您在尝试连接到实例时收到错误，请参阅 [排查 Amazon EC2 Linux 实例的连接问题](TroubleshootingInstancesConnecting.md)。

# 使用 SCP 将文件传输到 Linux 实例
<a name="linux-file-transfer-scp"></a>

在您的本地计算机与 Linux 实例之间传输文件的一种方法是使用安全复制协议 (SCP)。SCP 非常适合简单的操作，例如一次性文件副本。SCP 用来保护文件传输的 .pem 文件与您用来通过 SSH 连接到实例的文件相同。如果需要保持文件同步，或者文件很大，则 **rsync** 比 SCP 更快、更高效。为安全起见，请通过 SSH 使用 **rsync**，因为 **rsync** 默认情况下会使用明文传输数据。

在使用 SCP 连接到 Linux 实例之前，请先完成以下任务：
+ **完成一般先决条件。**
  + 检查您的实例是否通过了状态检查。可能需要花几分钟时间，实例才能准备好接受连接请求。有关更多信息，请参阅 [查看状态检查](viewing_status.md)。
  + [获取所需的实例详细信息](connection-prereqs-general.md#connection-prereqs-get-info-about-instance).
  + [查找私有密钥并设置权限](connection-prereqs-general.md#connection-prereqs-private-key).
  + [（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint).
+ **允许来自您 IP 地址的入站 SSH 流量。**

  确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。有关更多信息，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。
+ **安装 SCP 客户端。**

  默认情况下，大多数 Linux、Unix 和 Apple 计算机都包含 SCP 客户端。如果您的计算机不含 SSH 客户端，OpenSSH 项目提供了整套 SSH 工具免费使用的功能，包括 SCP 客户端。有关更多信息，请参阅 [https://www.openssh.com](https://www.openssh.com)。

以下过程将指导您使用实例的公有 DNS 名称或 IPv6 地址（如果实例具有该地址），通过 SCP 传输文件。

**使用 SCP 在您的计算机和实例之间传输文件**

1. 确定源文件在计算机上的位置以及在实例上的目标路径。在以下示例中，私有密钥文件的名称是 `key-pair-name.pem`，要传输的文件是 `my-file.txt`，实例的用户名是 ec2-user，实例的公有 DNS 名称是 `instance-public-dns-name`，实例的 IPv6 地址是 `2001:db8::1234:5678:1.2.3.4`。
   + （公有 DNS）要将文件传输到实例上的目标位置，请在计算机中输入以下命令。

     ```
     scp -i /path/key-pair-name.pem /path/my-file.txt ec2-user@instance-public-dns-name:path/
     ```
   + (IPv6) 如果实例具有 IPv6 地址，要将文件传输到实例上的目标位置，请在计算机中输入以下命令。IPv6 地址必须用方括号 (`[ ]`) 括起来，并且必须对方括号进行转义 (`\`)。

     ```
     scp -i /path/key-pair-name.pem /path/my-file.txt ec2-user@\[2001:db8::1234:5678:1.2.3.4\]:path/
     ```

1. 如果您尚未使用 SSH 连接到实例，则会看到如下响应：

   ```
   The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (10.254.142.33)'
   can't be established.
   RSA key fingerprint is 1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f.
   Are you sure you want to continue connecting (yes/no)?
   ```

   （可选）您可以选择验证安全警报中的指纹是否与实例指纹匹配。有关更多信息，请参阅[（可选）获取实例指纹](connection-prereqs-general.md#connection-prereqs-fingerprint)。

   输入 **yes**。

1. 如果传输成功，则响应的形式与下方类似：

   ```
   Warning: Permanently added 'ec2-198-51-100-1.compute-1.amazonaws.com' (RSA) 
   to the list of known hosts.
   my-file.txt                                100%   480     24.4KB/s   00:00
   ```

1. 要在另一个方向上传输文件（从 Amazon EC2 实例中传输到计算机），请颠倒主机参数的顺序。例如，您可以将 `my-file.txt` 从 EC2 实例传输到本地计算机上的目标位置，保存为 `my-file2.txt`，如以下示例所示。
   + （公有 DNS）要将文件传输到计算机中的目标位置，请在计算机中输入以下命令。

     ```
     scp -i /path/key-pair-name.pem ec2-user@instance-public-dns-name:path/my-file.txt path/my-file2.txt
     ```
   + (IPv6) 如果实例具有 IPv6 地址，要将文件传输到计算机中的目标位置，请在计算机中输入以下命令。IPv6 地址必须用方括号 (`[ ]`) 括起来，并且必须对方括号进行转义 (`\`)。

     ```
     scp -i /path/key-pair-name.pem ec2-user@\[2001:db8::1234:5678:1.2.3.4\]:path/my-file.txt path/my-file2.txt
     ```

# 管理 Amazon EC2 Linux 实例上的系统用户
<a name="managing-users"></a>

每个 Linux 实例均以默认的 Linux 系统用户启动。您可以向实例添加用户，也可以删除用户。

对于默认用户，[默认用户名](#ami-default-user-names)由您在启动实例时指定的 AMI 决定。

**注意**  
默认情况下，密码身份验证和根用户登录将被禁用，而 sudo 将会启用。要登录您的实例，必须使用密钥对。有关日志记录的更多信息，请参阅 [使用 SSH 连接到 Linux 实例](connect-to-linux-instance.md)。  
您可以允许对您的实例进行密码身份验证和根用户登录。有关更多信息，请参阅您的操作系统文档。

**注意**  
Linux 系统用户不应与 IAM 用户混淆。有关更多信息，请参阅 *IAM 用户指南*中的 [IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_iam-users)。

**Topics**
+ [

## 默认用户名
](#ami-default-user-names)
+ [

## 注意事项
](#add-user-best-practice)
+ [

## 创建用户
](#create-user-account)
+ [

## 删除用户
](#delete-user-account)

## 默认用户名
<a name="ami-default-user-names"></a>

EC2 实例的默认用户名由您在启动实例时指定的 AMI 决定。

默认用户名为：
+ 对于 Amazon Linux AMI，用户名是 `ec2-user`。
+ 对于 CentOS AMI，用户名是 `centos` 或 `ec2-user`。
+ 对于 Debian AMI，用户名是 `admin`。
+ 对于 Fedora AMI，用户名是 `fedora` 或 `ec2-user`。
+ 对于 FreeBSD AMI，用户名是 `ec2-user`。
+ 对于 RHEL AMI，用户名是 `ec2-user` 或 `root`。
+ 对于 SUSE AMI，用户名是 `ec2-user` 或 `root`。
+ 对于 Ubuntu AMI，用户名为 `ubuntu`。
+ 对于 Oracle AMI，用户名是 `ec2-user`。
+ 对于 Bitnami AMI，用户名是 `bitnami`。

**注意**  
要查找其他 Linux 发行版的默认用户名，请咨询 AMI 提供商。

## 注意事项
<a name="add-user-best-practice"></a>

对于许多应用程序来说，使用默认用户是适当的。但是，您可以选择添加用户，以便个人能够拥有自己的文件和工作区。此外，为新用户创建用户比向多个（可能缺乏经验的）用户授予对默认用户的访问权限更安全，因为如果使用不当，该默认用户可能对系统造成严重破坏。有关更多信息，请参阅[有关保护您的 EC2 实例的提示](https://aws.amazon.com/articles/tips-for-securing-your-ec2-instance/)。

要使用 Linux 系统用户启用对 EC2 实例的用户 SSH 访问，您必须与用户分享 SSH 密钥。此外，您可以使用 EC2 Instance Connect 来向用户提供访问权限而无需共享和管理 SSH 密钥。有关更多信息，请参阅 [使用公有 IP 地址和 EC2 Instance Connect 连接到 Linux 实例](connect-linux-inst-eic.md)。

## 创建用户
<a name="create-user-account"></a>

先创建用户，然后添加允许用户连接并登录实例的 SSH 公有密钥。

**重要**  
在此过程的步骤 1 中，创建新的密钥对。由于密钥对的功能类似于密码，因此安全处理至关重要。如果您为用户创建密钥对，则必须确保将私有密钥安全地发送给这些用户。或者，用户可以通过创建自己的密钥对来完成步骤 1 和步骤 2，确保其计算机上的私有密钥安全，然后将公有密钥发送给您以完成步骤 3 中的过程。

**创建用户**

1. [创建新的密钥对](create-key-pairs.md#having-ec2-create-your-key-pair)。您必须将 `.pem` 文件提供给要为其创建用户的用户。他们必须使用此文件来连接到实例。

1. 从您在上一步中创建的密钥对中检索公有密钥。

   ```
   $ ssh-keygen -y -f /path_to_key_pair/key-pair-name.pem
   ```

   该命令返回公有密钥，如以下示例所示。

   ```
   ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6Vhz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXrlsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZqaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3RbBQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
   ```

1. 连接到实例。

1. 使用 **adduser** 命令创建用户并将其添加到系统（`/etc/passwd` 文件中会有一个条目）。该命令还可以为用户创建一个组和一个主目录。在此示例中，用户名为 `newuser`。
   + AL2023 和 Amazon Linux 2

     对于 AL2023 和 Amazon Linux 2，创建用户时将默认禁用密码身份验证。

     ```
     [ec2-user ~]$ sudo adduser newuser
     ```
   + Ubuntu

     添加 `--disabled-password` 参数以创建用户并禁用密码身份验证。

     ```
     [ubuntu ~]$ sudo adduser newuser --disabled-password
     ```

1. 切换到新用户，以便所创建的目录和文件具有适当的所有权。

   ```
   [ec2-user ~]$ sudo su - newuser
   ```

   如果提示从 `ec2-user` 变为 `newuser`，则表示您已将 Shell 会话切换到新用户。

1. 将 SSH 公有密钥添加到用户。首先在 SSH 密钥文件对应的用户主目录中创建一个目录，然后创建密钥文件，最后将公有密钥粘贴到该密钥文件中，如以下分步说明中所述。

   1. 在 `newuser` 主目录中创建一个 `.ssh` 目录，并将其权限更改为 `700` (只有文件所有者能够读取、写入或打开该目录。)

      ```
      [newuser ~]$ mkdir .ssh
      ```

      ```
      [newuser ~]$ chmod 700 .ssh
      ```
**重要**  
如果没有这些确切的文件权限，用户将无法登录。

   1. 在 `.ssh` 目录中，创建一个名为 `authorized_keys` 的文件，并将该文件权限更改为 `600`（只有文件所有者才能够读取或写入此文件)。

      ```
      [newuser ~]$ touch .ssh/authorized_keys
      ```

      ```
      [newuser ~]$ chmod 600 .ssh/authorized_keys
      ```
**重要**  
如果没有这些确切的文件权限，用户将无法登录。

   1. <a name="edit_auth_keys"></a>使用您常用的文本编辑器 (如 **vim** 或 **nano**) 打开 `authorized_keys` 文件。

      ```
      [newuser ~]$ nano .ssh/authorized_keys
      ```

      将您在**步骤 2** 中检索到的公有密钥粘贴到文件中并保存更改。
**重要**  
确保将公有密钥粘贴到一个连续行中。不得将公有密钥拆分为多行。

      用户现在能够使用添加到 `newuser` 文件的公有密钥所对应的私有密钥登录实例上的 `authorized_keys` 用户。有关连接到 Linux 实例的不同方法的更多信息，请参阅[使用 SSH 连接到 Linux 实例](connect-to-linux-instance.md)。

## 删除用户
<a name="delete-user-account"></a>

如果不再需要某个用户，可以将其删除，使它不再可用。

使用 **userdel** 命令从系统中删除用户。当您指定 `-r` 参数时，用户的主目录和邮件后台打印将被删除。要保留用户的主目录和邮件后台打印，请省略 `-r` 参数。

```
[ec2-user ~]$ sudo userdel -r olduser
```