如何排查使用辅助 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 进行连接以识别错误
查看系统日志以查找错误
如果上述步骤无法解决问题,请查看实例的系统日志。可以通过两种方法来访问实例上的日志:
方法 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。