在EC2 Debian操作系统上安装Agent并使用EC2 Connect功能

注:截止2023年7月,EC2 Instance Connect功能只在海外区域可用,Session Manager在海外区和中国区都可用。

一、背景

Debian是常用主流Linux系统之一,Ubuntu就是源自Debian体系发展出来的。Debian在云端使用频度不如CentOS/Ubuntu广泛。在AWS云上提供的EC2 AMI中,可在创建EC2向导界面直接选择Debian 11。

不过,这个Debian 11的AMI镜像虽然是AWS官方维护的,但是其自身没有集成System Manager Agent,也没有集成EC2 Instance Connect插件。因此,在EC2控制台上,点击Connect按钮,无论选择EC2 Instance Connect还是选择Session Manager,都会提示无法连接,如下截图。

EC2 Session Manager 无法连接的报错现象如下:

EC2 Instance Connect 无法连接的报错现象如下:

为了解决这个问题,就需要在Debian 11上安装这两个Agent,并且建议通过Userdata方式在创建EC2时候注入到EC2中,以更轻松的轻松。

二、准备EC2 Userdata脚本相关脚本(可选)

本章节为所有脚本的梳理和准备过程,如果您希望直接使用整理好的脚本,可跳过本章节,直接使用下一个章节中已经准备好的脚本。

1、准备Session Manager Agent的脚本

使用X86_64处理器的机型上执行如下命令即可完成安装和部署。

wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
wget https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb
dpkg -i -E amazon-cloudwatch-agent.deb

使用Graviton处理器的ARM机型上执行如下命令即可完成安装和部署。

wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm64/amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
dpkg -i -E amazon-cloudwatch-agent.deb

2、从源代码构建EC2 Instance Connection的deb安装包

使用EC2 Instance Connection功能需要在EC2上安装软件包,在Redhat/CentOS/Amazon Linux上,使用yum即可安装。在Ubuntu上使用apt上即可安装。

但是,AWS官方没有给Debian系统提供现成的软件源。由此,我们需要从源代码构建安装包。一旦构建好后,未来可以复用,不需要重复构建。

首先启动一台Debian11系统,使用SSH通过网络登陆上去(注意安全组不要开放到0.0.0.0/0,这样很不安全)。准备好后,安装deb包构建工具,从github下载代码,然后在本EC2上构建。

apt install devscripts dpkg-dev -y
git clone https://github.com/aws/aws-ec2-instance-connect-config.git
cd aws-ec2-instance-connect-config
./bin/make_deb.sh 1.1 18

以上命令即可构建debian11操作系统使用的EC2 Instance Connection包。

在构建的末尾,可能会提示签名错误,例如如下信息:

gpg: skipped "Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>": No secret key
gpg: /tmp/debsign.hoxHY2K8/ec2-instance-connect_1.1.19.dsc: clear-sign failed: No secret key
debsign: gpg error occurred!  Aborting....
debuild: fatal error at line 1112:
running debsign failed

这不会影响已经完成的构建,此时已经可以在当前目录中找到ec2-instance-connect_1.1.19_all.deb,安装即可使用。

dpkg -i ec2-instance-connect_1.1.19_all.deb

为了方便后续部署,我们将这个软件包从构建环境里边复制出来,放到可下载的地址中,方便后续安装调用。

三、创建EC2并使用Userdata脚本完成以上Agent的安装

1、创建EC2并输入Userdata

进入EC2控制台,点击创建Intance,输入EC2的名称。在选AMI界面,点击Quick Start按钮,从操作系统清单的最右侧选中Debian,然后下方选择默认的Debian 11操作系统镜像。最后选择系统架构是x86_64或者arm架构。如下截图。

点击高级配置,输入userdata如下。如下截图。

使用X86_64处理器的机型:

#! /bin/bash
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
wget https://blogimg.bitipcman.com/workshop/EC2-debian/ec2-instance-connect_1.1.19_all.deb
dpkg -i ec2-instance-connect_1.1.19_all.deb

Graviton的ARM机型:

#! /bin/bash
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm64/amazon-ssm-agent.deb
dpkg -i amazon-ssm-agent.deb
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent
wget https://blogimg.bitipcman.com/workshop/EC2-debian/ec2-instance-connect_1.1.19_all.deb
dpkg -i ec2-instance-connect_1.1.19_all.deb

其他EC2配置按正常要求配置即可。由此开机完成。

2、测试连接

进入EC2控制台界面,可查看刚创建的EC2的状态,可点击刷新按钮更新状态。需要等待EC2的Status check显示为绿色的2/2 checks passed,即开始连接。选中EC2后,点击页面上方的Connect按钮。如下截图。

在弹出的Connect to instance界面上,点击左侧第一项Connect using EC2 Instance Connect,下方的用户名会自动带出本AMI对应的用户名。例如CentOS、Redhat Enterpriser Linux、Amazon Linux的默认用户名是ec2-user,Ubuntu系统的默认用户名是ubuntu,Debian系统的默认用户名是admin。这个用户名是自动带出来的,不需要修改。最后点击右下角连接按钮。如下截图。

可看到EC2 Instance Connect连接成功。如下截图。

接下来再测试Session Manager。点击第二个标签页Session Manager,然后点击右下角的Connect按钮。如下截图。

可看到EC2 Session Manager连接成功。如下截图。

测试成功。至此实验完成。

四、参考文档

Debian Server 上的 SSM Agent 的快速安装命令

https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/agent-install-deb.html

支持EC2 Instance Connect 的AMI

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-connect-prerequisites.html#eic-prereqs-amis

EC2 Instance Connection 安装

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html

Github上的EC2 Instanc的Connect源码

https://github.com/aws/aws-ec2-instance-connect-config