如何排查使用辅助 IP 地址连接到 EC2 Linux 实例时遇到的问题?

上次更新日期:2021 年 4 月 28 日

我无法使用辅助 IP 地址连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。如何排查此问题?

简短描述

要使用辅助 IP 地址通过 SSH 连接到实例,请确保您的实例满足以下先决条件:

如果您在私有子网中启动了实例,则使用辅助私有 IP 地址通过 SSH 进行连接。确保从子网的 IPv4 CIDR 数据块范围中为网络接口选择辅助 IPv4 地址。 如果您在公有子网中启动了实例,则将弹性 IP 地址分配给附加到实例的辅助私有 IP 地址。 确保 EC2 实例上的操作系统能够识别辅助私有 IP 地址。
对于 Amazon Linux,请参阅配置您的实例上的操作系统以识别辅助私有 IPv4 地址。
对于 Ubuntu,请参阅如何让我的辅助网络接口在我的 Ubuntu EC2 实例中工作?
对于其他 Linux 分发,请参阅您的分发版本的网络配置文档。

如果实例满足这些先决条件,请执行以下操作以排查通过 SSH 连接时遇到的问题:

    使用详细消息通过 SSH 进行连接以识别错误。 查看系统日志以查找错误。
解决方法

注意:开始之前,请查看一般连接先决条件。

使用详细消息通过 SSH 进行连接以识别错误

如何排查使用 SSH 连接 Amazon EC2 Linux 实例时遇到的问题?

查看系统日志以查找错误

如果上述步骤无法解决问题,请查看实例的系统日志。可以通过两种方法来访问实例上的日志:

方法 1:使用 EC2 串行控制台

如果您为 Linux 启用了 EC2 串行控制台,则可以使用它来排查受支持的基于 Nitro 的实例类型问题。串行控制台可帮助您排查启动问题、网络配置和 SSH 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI) 访问串行控制台。

在使用串行控制台之前,您必须在账户级别授予对串行控制台的访问权限,并创建 AWS Identity and Access Management (IAM) 策略以向 IAM 用户授予访问权限。此外,每个使用串行控制台的实例都必须至少包含一个基于密码的用户。如果您的实例无法访问,并且尚未配置对串行控制台的访问权限,请按照方法 2 中的说明进行操作。有关为 Linux 配置 EC2 串行控制台的信息,请参阅配置对 EC2 串行控制台的访问权限。

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。

方法 2:使用救援实例访问日志

警告:开始此流程之前,请注意以下几点:

停止和启动实例会擦除实例存储卷上的所有数据。确保备份实例存储卷上要保存的所有数据。有关更多信息,请参阅确定实例的根设备类型。 停止后重启实例会更改实例的公有 IP 地址。在将外部流量路由到您的实例时,最佳做法是使用弹性 IP 地址,而不是公有 IP 地址。

1.打开 Amazon EC2 控制台。

2.从导航窗格中选择 Instances(实例),然后选择尝试连接的实例。

3.选择 Instance State(实例状态)、Stop Instance(停止实例),然后选择 Stop(停止)。记下实例 ID

注意:如果您没有使用新 EC2 体验,请选择要连接的实例。依次选择 Actions(操作)、Instance State(实例状态)、Stop(停止)、Stop(停止)。

4.将根 Amazon Elastic Block Store (Amazon EBS) 卷从停止的实例分离。记下根 EBS 卷的设备名称。故障排除后重新连接卷时,需要设备名称。

5.在原始实例所在的可用区中启动新的 EC2 实例。新实例将成为您的“救援”实例。

注意:最佳做法是使用 Amazon Linux 2 实例作为救援实例。使用 Amazon Linux 2 实例可以防止救援实例因为 EBS 卷的 UUID 或名称相同而从附加的 EBS 卷中启动。

6.启动救援实例后,从导航窗格中选择 Volumes(卷),然后选择受损实例已分离的根卷。

注意:如果受损实例的根卷具有 Marketplace 代码,而救援实例不是 Amazon Linux,则在附加根 EBS 卷之前停止救援实例。例如,如果您从官方 RHEL 或 CentOS AMI 启动实例,则实例可能具有 Marketplace 代码。

7.依次选择 Actions(操作)、Attach Volume(附加卷)。

8.在导航窗格中选择 Instances(实例),然后选择救援实例。

9.依次选择 Instance state(实例状态)、Start instance(启动实例)。

注意:如果您没有使用新 EC2 体验控制台,请选择要连接的实例,然后依次选择 Actions(操作)、Instance State(实例状态)、Start(开始)。

11.通过 SSH 连接到救援实例。

12.运行以下命令以验证 EBS 卷是否成功附加到救援实例。在以下命令中,卷附加为 /dev/sdf

$ lsblk

以下是该命令输出的示例:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   20G  0 disk 
└─xvda1 202:1    0   20G  0 part /
xvdf    202:80   0  100G  0 disk

13.使用以下命令创建挂载点目录,然后将附加的卷附加到救援实例。在下例中,挂载点目录为 /test

$ sudo su
$ mkdir /test
$ mount /dev/xvdf1 /test
$ df -h
$ cd /test

14.查找系统日志和与身份验证相关的日志中的错误,这些错误带有您尝试访问的时间戳。

Amazon Linux、RHEL 和 CentOS

$ sudo cat /test/var/log/messages

Amazon Linux、RHEL、CentOS(与身份验证有关的问题)

$ sudo cat /test/var/log/secure

Ubuntu、Debian(系统日志)

$ sudo cat /test/var/log/syslog

Ubuntu、Debian(身份验证相关问题)

$ sudo cat /test/var/log/auth.log

15.在查看配置并解决任何错误之后,请卸载 EBS 根卷并从救援实例中分离。

$ umount /test

16.将卷附加到原始实例。设备名称为 /dev/xvda