# Troubleshooting connectivity using EC2 Serial Console 使用ec2串行控制台解决(排除)网络连接故障 ## 概览 你将了解如何为账户启用串行控制台访问权限、如何授予串行控制台权限以及如何使用串行控制台连接到实例。 #### 本实验将使用以下 AWS 工具和服务: 1. Amazon Elastic Compute Cloud (Amazon EC2) Amazon EC2 是一种 Web 服务,可在云中提供大小可调的计算容量。该服务旨在让开发人员能更轻松地进行 Web 规模的云计算。Amazon EC2 将获取并启动新服务器实例所需的时间缩短至几分钟,这样,当你的计算要求发生变化时,你就可以快速增加或缩减计算容量。 2. EC2 Instance Connect Amazon EC2 Instance Connect 提供了一种安全的方法,可使用 Secure Shell(SSH)连接到 Linux 实例。借助 EC2 Instance Connect,你可以使用 AWS Identity and Access Management (IAM) 策略和主体来控制对实例的 SSH 访问,无需共享和管理 SSH 密钥。使用 EC2 Instance Connect 的所有连接请求将记录到 AWS CloudTrail 中,以便你可以审核连接请求。 你可以通过 Amazon EC2 控制台或所选的 SSH 客户端使用 EC2 Instance Connect 连接到实例。 在使用 EC2 Instance Connect 连接到实例时,EC2 Instance Connect API 会将一个 SSH 公有密钥推送到实例元数据并在其中保留 60 秒。附加到用户的 IAM policy 会授权用户将公有密钥推送到实例元数据。SSH 进程守护程序使用在安装 EC2 Instance Connect 时配置的 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser,从实例元数据中查找公有密钥以进行身份验证,并将你连接到实例。 3. Parameter Store(AWS Systems Manager 的一项功能)可提供安全的分层存储,用于配置数据管理和密钥管理。 您可以将密码、数据库字符串、Amazon Machine Image (AMI) ID 和许可证代码等数据存储为参数值。可以将值存储为纯文本或加密数据。 您可以使用创建 Systems Manager 参数时指定的唯一名称,在脚本、命令、SSM 文档以及配置和自动化工作流中引用该参数。 要开始使用 Parameter Store,请打开 Systems Manager 控制台。在导航窗格中,选择 Parameter Store。 Parameter Store 还与 Secrets Manager 进行了集成。您可以在使用其他已支持引用 Parameter Store 参数的 AWS 服务时检索 Secrets Manager 密钥。有关更多信息,请参阅[ 通过 Parameter Store 参数引用 AWS Secrets Manager 密钥。]([超链接地址](https://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/integration-ps-secretsmanager.html)) Parameter Store 具备下列优势: 使用安全、可扩展的托管密钥管理服务,无需管理服务器。 - 通过将数据与代码分离来改善安保状况。 - 分层存储配置数据和加密的字符串,而且可跟踪版本。 - 实现以细粒度控制和审核访问。 - 可靠地存储参数,因为 Parameter Store 托管在 AWS 区域的多个可用区中。 4. 本文中实验需要打开Troubleshooting connectivity using EC2 Serial Console 实验控制台,其中配置了部分文件供使用 ## 目标 完成本实验后,你将能够: 使用 vsftpd(开源FTP服务器守护程序) 和 firewalld 配置 FTP 服务器。 在账户级别启用串行控制台。 使用串行控制台连接到 EC2 实例。 使用远程桌面 (RDP) 连接到运行 Windows Server 的 Amazon EC2 实例 ### 先决条件 要成功完成本实验,你应该熟悉 Linux 和联网,并对 AWS 有基本的了解。你还需要在本地计算机上安装远程桌面客户端。 ### 如何安装 RDP 客户端(远程桌面协议): Windows 默认包含一个 RDP 客户端。要确定这一点,请在 Command Prompt(命令提示符)窗口中键入 mstsc。如果你的计算机无法识别此命令,请查看 Windows 主页并搜索 Microsoft Remote Desktop 应用程序的下载文件。 Mac 用户可以从 Mac App Store 下载 Microsoft Remote Desk 应用程序。 Linux 用户可以使用各种 DRP 客户端,包括 Remmina。 ## 任务 1:连接到 FTP 主机(提供FTP服务) 启动实验 在本任务中,你将使用 EC2 Instance Connect 连接到 Amazon Linux EC2 实例。在本实验中,我们将此实例称为 ftpHost。 在服务右侧的搜索框中,搜索并选择 EC2 以打开 Amazon EC2 控制台。 在 EC2 Dashboard(EC2 控制面板)上,选择实例 (正在运行)。 选中 ftpHost 实例旁边的复选框,然后选择 连接。 你将转到连接到实例页面。打开 EC2 Instance Connect 选项卡,确定用户名是否设置为 ec2-user,然后选择 EC2 Serial Console(串行控制台)下的 连接 EC2 Instance Connect 使你能够使用 SSH 连接到具有公有或私有 IP 地址的实例。所有 SSH 密钥都由 AWS Identity and Access Management 管理,这意味着你在共享或管理这些密钥时永远不必担心。 此时将打开一个新的浏览器标签页或窗口,其中包含与 ftpHost 的连接。 输入以下命令,确认你位于 ec2-user 的主目录中(告诉用户你在文件系统的具体位置): ``` pwd ``` 确认你位于以下目录中: /home/ec2-user ## 任务 2:安装和配置 vsftpd 在本任务中,你将下载、安装和配置 very secure FTP daemon (vsftpd)。vsftpd 是一种高度安全的轻量级 FTP 服务器。 输入以下命令以更新 YUM 包管理器(sudo指令): ``` sudo yum update -y ``` 现在你已经更新了 YUM,请安装 vsftpd 服务器: ``` sudo yum install vsftpd -y ``` 查看输出以确认安装成功。输出的末尾应类似于以下内容: ![alt text](figures/Installed.png) vsftpd.conf 文件定义了用于配置 vsftpd 服务器的参数。在本实验中,我们已为你创建了一个修改过的 .conf 文件。 使用 less 命令查看 .conf 文件: ``` less +G myvsftpd.conf ``` 下面的代码块显示了 myvsftpd.conf 文件的末尾,其中已写入大部分自定义选项。 ![alt text](figures/已写入自定义.png) 配置文件包含以下对本实验很重要的设置: ```chroot_list_enable=YES ```启用 chroot jail 以将 FTP 用户锁定到服务器上的主目录中。 ```chroot_list_file=/etc/vsftpd.chroot_list ```指定允许访问服务器的用户列表的位置。 ```pasv_enable=YES``` 允许通过临时端口传输数据。 ```pasv_min_port=40000 ```和```pasv_max_port=41000 ```定义了用于数据传输的临时端口。 接下来,我们将把标准 vsftpd.conf 文件替换为自定义文件。 按 q 按钮,退出 less 命令并返回命令提示符。 接下来,创建原始 .conf 文件的备份: ``` sudo mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak ``` 现在,将原始 .conf 文件替换为自定义文件: ``` sudo cp ~/myvsftpd.conf /etc/vsftpd/vsftpd.conf ``` 我们需要创建一个新用户,用来验证是否已正确配置 FTP 服务器。运行以下命令以创建该用户及其可将文件上传到其中的主目录。 ``` sudo useradd -m ftpuser ``` 为我们的新用户分配密码: ``` sudo passwd ftpuser ``` 现在,输入这些说明左侧显示的 AdministratorPassword 的值。系统将提示你确认更改。再次输入密码。 你已成功创建测试用户。接下来,为该用户创建一个 FTP 目录: ``` sudo mkdir /home/ftpuser/ftp ``` 更改目录的所有权并删除权限: ``` sudo chown nobody:nobody /home/ftpuser/ftp sudo chmod a-w /home/ftpuser/ftp ``` 现在,创建一个子目录供用户上传文件。与 /home/ftpuser/ftp 目录不同,请将 ftpuser 设为此目录的所有者: ``` sudo mkdir /home/ftpuser/ftp/files sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files ``` 需要将新创建的用户添加到允许访问 vsftpd 服务器的用户列表中。使用以下命令创建授权用户列表,将测试用户添加到该列表中,然后将该文件移动到 /etc 目录: ``` echo "ftpuser" > ~/vsftpd.chroot_list sudo chown root:root ~/vsftpd.chroot_list sudo mv ~/vsftpd.chroot_list /etc/vsftpd.chroot_list ``` 现在,重新启动 vsftpd,然后确认它正在运行: ``` sudo systemctl restart vsftpd sudo systemctl status vsftpd ``` 输出应类似于以下内容: ![alt text](figures/vsftpd预期.png) ## 任务 3:配置防火墙规则 尽管 ftpHost 已受到安全组的保护,但安全团队已指示你在操作系统级别配置其他防火墙。 在本任务中,你将运行一个脚本,该脚本将安装 firewalld 并将其配置为允许 FTP 流量。 使用 ls 命令查看 /home 目录的内容。 ``` ls ~ ``` 输出应显示两个文件: ![alt text](figures/home文件夹预期.png) firewalld 应用程序使用区域来确定网络连接的可信度。由于 FTP 服务器旨在供大量承包商和外部顾问使用,因此系统要求你使用公有区域或不可信区域配置访问权限。 configureFirewall.sh 脚本会自动为你执行此过程。在你安装 firewalld 后,它会创建两个公有区域。第一个区域允许客户端通过端口 21 向 FTP 服务器进行注册和身份验证,第二个区域允许在端口 40000-41000 上进行数据传输。 在从 configureFirewall.sh 脚本提取的以下代码段中,请注意 --zone=public 标记是用于创建以下区域: ![alt text](figures/创建以下区域.png) ## 任务 4:允许访问 EC2 串行控制台并连接到实例 用串行控制台,你可以与实例进行交互,就好像你的键盘和显示器直接连接到它的串行端口一样。 首先确定你的账户是否允许访问 EC2 串行控制台。 从屏幕顶部的导航中,选择 EC2 链接。 你将返回 EC2 Dashboard(EC2 控制面板)。 在屏幕右侧的账户属性卡中,选择 EC2 Serial Console(EC2 串行控制台)。 选择 管理。 确保已选中允许复选框。如果没有,请选中该复选框,然后选择 更新。 已在你的整个账户中启用 EC2 串行控制台访问权限。或者,如果你希望提供对串行控制台的更精细的访问权限,则可以结合使用服务控制策略 (SCP) 和 IAM 策略来限定访问范围以满足你的要求。有关如何配置 EC2 串行控制台访问权限的详细说明,请参阅用户指南。 在使用 EC2 串行控制台连接到实例之前,必须向 IAM 用户授予显式权限。幸运的是,由于你是网络管理员,你早已获得这些权限。 下面是可用于向用户授予对 EC2 串行控制台的访问权限的策略文档示例。请注意,该文档包含 ec2-instance-connect:SendSerialConsoleSSHPublicKey 操作。此操作会向 IAM 用户授予将公有密钥推送到串行控制台服务的权限,该服务将启动串行控制台会话。 ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSerialConsoleAccess", "Effect": "Allow", "Action": [ "ec2-instance-connect:SendSerialConsoleSSHPublicKey" ], "Resource": "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" } ] } ``` 从屏幕顶部的导航中,选择 EC2 链接以返回控制面板。 选择实例 (正在运行)。 选中 ftpHost 旁边的复选框,然后选择 连接。 打开 EC2 Serial Console(EC2 串行控制台)选项卡。 选择 连接。 此时将打开一个显示终端会话的新标签页。 将光标放在窗口中,然后按 Enter 键。 终端窗口中将出现登录提示符。 在登录提示符处,键入 root。 在 Password(密码)字段中,输入这些说明左侧显示的 AdministratorPassword 的值。 ## 任务 5:对 firewalld 进行问题排查 在本任务中,你将对 firewalld 进行问题排查,以便让 ftpHost 重新连接到网络。 确认 firewalld 正在运行。输入以下内容: ``` systemctl status firewalld.service ``` firewalld 服务似乎正在运行。让我们看看是否可以在日志中找到任何异常。输入以下命令以查看日志: ``` less /var/log/firewalld ``` 日志不包含任何有用的信息,因此让我们看看你应用的规则。也许是其中一个规则导致计算机与网络的连接断开了。 键入 q 以关闭 less 命令,然后输入以下命令以查看允许的服务和端口: ``` firewall-cmd --list-ports ``` 这很奇怪。命令输出未显示任何服务或端口。你的防火墙应该被配置为允许在端口 21 和 40000-41000 上使用 TCP,但它似乎阻止了所有流量。 也许有什么触发了 firewalld 进入 panic 模式。panic 模式是一种紧急状态,可终止所有网络连接并阻止建立新连接。 输入以下命令以确定是否启用了 panic 模式: ``` firewall-cmd --query-panic ``` 查看输出: ``` root@ip-172-31-13-0:~# firewall-cmd --query-panic yes ``` 防火墙已进入 panic 模式。这就解释了为何你无法连接到实例。 输入以下命令以关闭 panic 模式: ``` firewall-cmd --panic-off ``` 重新启动防火墙: ``` systemctl restart firewalld ``` 按 ENTER 键以返回命令提示符。 验证 firewalld 是否在正常运行: ``` systemctl status firewalld ``` 输出应类似于以下内容: ![alt text](figures/firewalld预期.png) 在关闭串行控制台连接之前,你应该重新启动 SSM 代理。这将确保其他用户能够使用 Session Manager 访问实例。输入以下命令: ``` systemctl restart amazon-ssm-agent ``` SSM 代理在 EC2 实例上运行,并使用 Systems Manager 文档启用 Session Manager。 要确认实例已重新连接至网络,请关闭当前浏览器标签页并返回 AWS 管理控制台中的连接到实例页面。 选择 EC2 Instance Connect 选项卡。 选择 连接。 ## 子任务 :将文件上传到 FTP 主机 在最后一项任务中,你将使用 Windows 实例来确认用户能够成功将文件上传到 FTP 服务器。 关闭包含 ECEC2 Instance Connect 会话的浏览器标签页。 你将返回连接到实例页面。 从页面顶部的导航中,选择实例链接。 在实例面板顶部,选中 ftpClient 旁边的复选框。 选择 连接。 打开 RDP 客户端选项卡,然后选择 下载远程桌面文件。 使用本地计算机上的 RDP 客户端打开远程桌面文件,然后连接到 ftpClient。 无视风险,继续 复制实验说明左侧显示的 AdministratorPassword 的值。出现提示后,输入此密码以连接到 ftpClient。 双击 Filezilla 打开(FileZilla是一款跨平台FTP软件)点击链接下载[Filezilla]([超链接地址](http://www.baidu.com/baidu.php?url=Kf0000K5cNxA6dzipi7U5e3_77Zw7w8jOdlcRp597T9csNeNXYBJcNXon_UDDEgQSSV_GllrbkGUoNoBgCLrqUHi2xWCwy1n1xc297BEWrZ3stRG6BYRKdLmu8pi1K-QOCwMRmq_fKEgI-s5z3QyVfNlJhafRPYWpsTSEEVLg7nROffzXXDeY0AdrE9sFJ2o2vK4AUGXiOhRgT2_uqR5ZyrIJt6S.7Y_NR2Ar5Od66WIoCXy9vjvmcJSiaPv89KvNSr1h_HZH_olXzzExzs34-9h9mzXr1Gz2.U1Yk0ZDqwh-_ugGGUAk90ZKGm1Yk0Zfquh-_ugGGUAk90A-V5HD3njD0u1dsmvqYpANz0ZNG5fKspyfqn6KWpyfqPj0d0AdY5HnsnjIxnW0dnfKopHYs0ZFY5iYk0AFG5HcsP7tdnjn0UynqnH0zg1csPHD0TgKGujYs0Z7Wpyfqn0KzuLw9u1Ys0A7B5HKxn0K-ThTqn6KsTjYs0A4vTjYsQW0snj0snj0s0AdYTjYs0AwbUL0qn0KzpWYs0AuY5H00TA6qn0KET1Ys0AFL5HDs0A4Y5H00TLCq0A71gv-bm1dsTzdMXh93XfKGuAnq0ZKCIZbq0Zw9ThI-IjYvndtsg1Dsnj00IZN15HDLPWf3P1bdn16LnH04rHm1n1Rs0ZF-TgfqnHT1nWD3rHDzrHDLnfK1pyfqmHP9PynvPjFBPjcLmvmLrfKWTvYqn1RkPYnkPjfdnHb3nHFKw0K_mMnqn0K9m1Yk0ZK85H00TydY5H00Tyd15H00XMfqn0KVmdqhThqV5HKxn0Kbmy4dmhNxTAk9Uh-bT1Y4rHnsPjRYr7ts0ZK9I7qhUA7M5H00uAPGujYs0ANYpyfqQHD0mgPsmvnqn0KdTA-8mvnqn0KkUymqn0KhmLNY5H00pgPWUjYs0APVmgwWpjYkrj0k0ZwV5HcLPHRvPHT3P6KLpHY40Au85Hm3nHmYnjD4gvPsT6KYIHddPWbLPjmsn6K9uAP_mgP15H00pymqn0K1TL0qnfK8IZws5HD0uZws5H00TLPsnWYs0ZnqmHP9PynvPjFBPjcLmvmLrNts0Zwb5Hm4P1fvnjc0mv6qn0KYTh7huh-Wgv-8IANzuh7WuNqYXgK-5H00mhd_5HDkP6K9uAu_myTqnfK_uhnqn0KbmvPb5fKYTh7buHYs0AFbpyfq0AqW5HD0mMfqn0KEmgwL5H00ULfqn0KETMKY5H0WnanWnansc10Wna3snj0snj0WnaPDw-fWnanVc108nj0snj0sc1D8nj0snj0sc10WnansQW0snj0snansc10Wnansc10Wnans0AF9UhV9mvnqnansc10Wn0KkgLmqna34rNtsQW0sg108njKxna34rNtsQW63g1Kxna33r7ts0AF1gLKzUvwGujYs0ZFEpyu_myTqn0KWIWY0pgPxmLK95H00mL0qn0K-TLfqn0KkuLIb5H00UL0k5H00TZ0Y5H00mLFW5HDzn16Y) ) Filezilla 客户端是一个开源 FTP 客户端。你将使用它向 ftpHost 上传文件。 选择确定以关闭弹出窗口。 将实验说明左侧显示的 FtpHostPrivateIp 粘贴到屏幕顶部的 Host(主机)字段。 在 Username(用户名)字段中,输入 ftpuser。 在 Password(密码)字段中输入这些说明左侧显示的 AdministratorPassword 的值。 单击 Quickconnect(快速连接)按钮。 此时将出现一个弹出窗口,询问你是否希望 Filezilla 保存密码。选择 Do not save passwords(不保存密码),然后单击 OK(确定)。 此时将出现另一个弹出窗口,提醒你 FTP 服务器不支持 FTP over TLS。选择 OK(确定)。 Filezilla 将建立与 ftpHost 的连接。 使用 Filezilla 客户端左侧的文件资源管理器导航到 C:\Users\Administrator\Documents。 名为 sample.log 的日志文件已保存到 “Documents” 文件夹。右键单击 sample.log 文件,然后选择 Upload(上传)。 确认 sample.log 文件现在显示在屏幕右侧的窗口中。 恭喜!文件已成功上传到 ftpHost。 ## 注意: 如果在个人使用时已配置防火墙 可以使用 运行该脚本以安装和配置 firewalld。 ``` cd ~ && sudo chmod +x configureFirewall.sh && sudo ./configureFirewall.sh ``` 按 1 以开始安装和配置 firewalld。 尝试使用 Session Manager 连接到实例。 Session Manager 管理器是一个交互式 Shell,使你可以连接到实例而无需管理 SSH 密钥或打开入站端口。 返回连接到实例页面处于打开状态的浏览器标签页。 打开 Session Manager 选项卡,然后选择 连接