文章目录
- 前言📖
- 一、报错先知❌
- 二、问题复现😯
- 三、解决办法🎲
- 四、验证结果👍
- 五、参考链接🔗
前言📖
这篇文章将讲述我在 Amazon EC2 上使用 RHEL9 AMI 时无法连接到 EC2 实例时所遇到的麻烦😖
一、报错先知❌
Failed to connect to your instance
Error establishing SSH connection to your instance. Try again later.
二、问题复现😯
1️⃣ 首先,创建了所需要的 VPC、子网、路由表、互联网网关、安全组等网络参数配置信息;
2️⃣ 接着,启动新的EC2实例,选择的操作系统是RHEL-9.5.0_HVM-20250313-x86_64-0-Hourly2-GP3
,选择之前配置好的VPC网络环境配置,以及创建出新的访问密钥、设置存储空间大小。
3️⃣ 最后,启动配置好的EC2实例。想要通过EC2 Instance Connect 的方式连接到实例,但是产生上述报错信息,导致无法通过EC2 Instance Connect 的方式连接到实例。
最终,在确认好EC2实例及网络配置正确的情况下,尝试在本地使用SSH的方式进行访问EC2实例。
在输入ssh -i <密钥> ec2-user@<公网IP地址>
回车后,成功连接到EC2实例。
至此,所有的配置均无问题,SSH能够正常访问到EC2实例。但为何无法通过EC2 Instance Connect 的方式连接到实例呢?
也重新启动了实例,再次尝试通过EC2 Instance Connect 连接到实例,依然还是发生报错,连接不上。
带着这个疑问以及产生出来的报错信息,在查阅相关文档后,最后找到了原因所在,并成功解决这一问题。
三、解决办法🎲
要使用 EC2 Instance Connect 连接到 Linux 实例,该实例必须安装 EC2 Instance Connect。安装 EC2 Instance Connect 将在实例上配置 SSH 进程守护程序。
以使用 Red Hat Enterprise Linux(RHEL)启动的实例上安装 EC2 Instance Connect为例进行安装演示。
- 使用 SSH 连接到实例
ssh -i <密钥.pem> ec2-user@<公网IP地址>
- 运行以下命令,在实例上安装 EC2 Instance Connect 软件包【RHEL 9 Intel/AMD(x86_64)】
mkdir /tmp/ec2-instance-connectcurl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect.rpmcurl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm -o /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpmsudo yum install -y /tmp/ec2-instance-connect/ec2-instance-connect.rpm /tmp/ec2-instance-connect/ec2-instance-connect-selinux.rpm
在 /opt/aws/bin/ 文件夹中会看到以下新脚本:
eic_run_authorized_keys
- 验证是否在实例上成功安装了 EC2 Instance Connect (RHEL 9)
sudo more /etc/ssh/sshd_config.d/60-ec2-instance-connect.conf
如果 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser 行包含以下值,则成功安装 EC2 Instance Connect:
AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
AuthorizedKeysCommandUser ec2-instance-connect
- AuthorizedKeysCommand 设置 eic_run_authorized_keys 文件以从实例元数据中查找密钥
- AuthorizedKeysCommandUser 将系统用户设置为 ec2-instance-connect
四、验证结果👍
最后,尝试使用EC2 Instance Connect 的方式连接到实例,发现连接成功✌️,如下图所示👏。
五、参考链接🔗
👀 在您的 EC2 实例上安装 EC2 Instance Connect
🥳 https://github.com/aws/aws-ec2-instance-connect-config