为什么我不能使用辅助 IP 地址连接到我的 Amazon EC2 Linux 实例?
我想了解为什么当我使用辅助 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 连接,识别错误。
- 查看系统日志查找错误。
- 查看网络配置文件。
**注意:**最好要保留实例和数据的备份。在排除故障之前,请创建 AMI 或为 Amazon Elastic Block Store(Amazon EBS)卷创建快照。
解决方案
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本。此外,在开始之前,请查看通用连接先决条件。
在开启详细消息的情况下通过 SSH 连接,以识别错误
有关详细说明,请参阅如何排查使用 SSH 连接到我的 Amazon EC2 Linux 实例的问题?
查看网络配置文件和系统日志来查找错误
如果问题仍未解决,请查看实例的系统日志。使用以下方法之一访问日志并对您的实例进行进一步故障排除。
方法 1: 使用主 IP 地址连接到您的实例
1.使用主 IP 地址通过 SSH 访问您的实例。获得访问权限后,请检查辅助网络接口的网络状态和配置。为此,请运行以下命令。
检查 ifconfig 的输出,并确保您的实例的辅助网络接口已启动:
$ ifconfig -a
或者运行以下命令:
$ ip a show < network interface name> up Example Command: $ ip a show eth1 up
**注意:**在本示例中,辅助网络接口为 eth1。将其替换为您的辅助网络接口的名称。
2.查看辅助网络接口配置文件并验证所有参数。例如,您可以检查任何 MAC 地址、辅助 IP 地址和辅助接口名称。如果您发现任何差异,请编辑文件并将其更新为正确的详细信息。运行以下命令之一:
Linux、RHEL、CentOS:
$ sudo cat /etc/sysconfig/network-scripts/ifcfg-eth1
Ubuntu
sudo cat /etc/network/interfaces.d/51-eth1.cfg or sudo cat /etc/netplan/51-eth1.yaml
3.运行以下命令以重新启动网络服务:
$ sudo service network restart
如果问题仍未解决,请查看您尝试访问时间段的系统日志和与身份验证相关的日志。
方法 2: 使用 Amazon EC2 Serial Console 访问您的实例
如果您无法通过 SSH 使用主 IP 地址访问您的实例,请使用适用于 Linux 的 Amazon EC2 Serial Console。Amazon EC2 Serial Console 可用于对支持的基于 Nitro 的实例类型和裸机实例类型进行故障排除。在使用 Amazon EC2 Serial Console 之前,请查看适用于 Linux 实例的 Amazon EC2 Serial Console 和配置对 Amazon EC2 Serial Console 的访问权限。
方法 3: 使用救援实例访问网络配置文件和日志
**重要事项:**在使用此方法之前,请注意以下限制:
- 如果您停止实例,会删除实例存储卷上的所有数据。您必须备份要保留的实例存储卷上的所有数据。有关详细信息,请参阅确定实例的根设备类型。
- 如果您的实例是 Amazon EC2 Auto Scaling 组的一部分。如果您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 启动该实例,则您的实例可能是 AWS Auto Scaling 组的一部分。在此用例中,如果您停止实例,则该实例可能会终止。实例终止取决于自动扩缩组的实例横向缩减保护设置。如果您的实例是自动扩缩组的一部分,在开始执行解决步骤之前,请暂时从此自动扩缩组中删除该实例。
- 如果您停止并启动实例,则该实例会更改其公共 IP 地址。将外部流量路由到您的实例时,最佳实践是使用弹性 IP 地址而不是公共 IP 地址。
- 检查实例的关闭行为是否设置为终止。这意味着,如果您使用操作系统中的 shutdown 或 power off 命令,则实例将被终止。为避免这种情况,请更改实例关闭行为。
使用以下步骤通过救援实例访问网络配置文件:
1.打开 Amazon EC2 控制台。
2.从导航窗格中选择实例,然后选择想要连接到的实例。
3.选择实例状态,然后选择停止实例。
4.选择停止,然后记下实例 ID。
注意:如果您不使用新的 Amazon EC2 体验,请选择要连接的实例。选择操作、实例状态、停止,然后再次选择停止。
5.从已停止的实例上分离根 EBS 卷。记下根 EBS 卷的设备名称。调查完成后,在重新连接卷时,需要提供设备名称。
6.在与原始实例相同的可用区(AZ)中启动新 EC2 实例。该新实例将成为您的救援实例。
**注意:**最佳实践是使用 Amazon Linux 2 实例作为救援实例。这将不允许救援实例从连接的 EBS 卷启动,因为 EBS 卷的 UUID 或名称相同。
7.救援实例启动后,从导航窗格中选择卷。然后选择受损实例的已分离根卷。
**注意:**如果您的实例有 AWS Marketplace 代码并且不是 Amazon Linux 实例,请在连接根 EBS 卷之前停止救援实例。例如,如果您从官方 RHEL 或 CentOS AMI 启动实例,则该实例可能有 AWS Marketplace 代码。
8.选择操作,然后选择连接卷。
9.在导航窗格中选择实例,然后选择救援实例。
10.选择实例状态,然后选择启动实例。
注意:如果您没有使用新的 Amazon EC2 体验,请选择要连接的实例,然后选择操作。选择实例状态,然后选择启动。
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
**注意:**挂载设备 /dev/xvdf1 时,如果您遇到任何与重复 UUID 相关的问题,请修改之前的命令并再次运行该命令:
$ mount -o nouuid /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.查看本文方法 1 中给出的辅助网络接口文件。检查配置并解决所有错误后,请卸载 EBS 根卷,然后将其与救援实例分离。
$ umount /test
16.将卷连接到原始实例。设备名称为 /dev/xvda。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 7 个月前