
1. 项目概述为什么一个EC2实例的创建与连接值得你花30分钟认真读完在AWS上点几下鼠标就能起一台云服务器——这话没错但90%的新手在第一次真正用起来时卡在了“连不上”这一步。不是密钥对没下载就是安全组没开22端口再或者Putty里填错了用户名、WinSCP里选错了协议类型。我带过不少刚转云运维的同事他们最常问的问题不是“怎么部署应用”而是“为什么我连不上自己的机器”。这个标题里的“Step by Step”不是教你怎么点按钮而是带你把每个环节背后的逻辑理清楚为什么必须用.pem文件而不是.ppk为什么Linux实例默认用户名是ec2-user而不是root为什么WinSCP能传文件Putty却只能敲命令这些细节背后是SSH协议机制、Linux用户权限模型、AWS网络沙箱设计三重逻辑的咬合。本文覆盖从控制台操作到终端验证的完整链路所有步骤均基于当前2024年AWS控制台最新UI实测不依赖任何第三方脚本或CLI工具——纯图形界面原生客户端适合零AWS基础但有基本Windows操作经验的读者。如果你正准备考AWS Certified Cloud Practitioner或者公司刚给你分配了一台测试环境要自己搭又或者只是想搞懂“云服务器到底和本地虚拟机有什么本质区别”这篇文章就是为你写的。它不讲抽象概念只讲你下一步该点哪里、填什么、为什么这么填。2. 整体设计思路与关键决策解析为什么这样设计才是稳的2.1 为什么坚持“图形界面原生客户端”路径很多教程一上来就推AWS CLI或Terraform这对新手是灾难。CLI需要提前配置凭证、理解JSON参数结构、处理报错信息Terraform更得先学HCL语法。而本方案全程使用AWS官方控制台无需安装任何插件 Putty开源免费 WinSCP免费版功能足够所有操作都在Windows桌面完成。这不是妥协而是精准匹配真实工作场景绝大多数中小企业的初始云环境搭建都是由非专职运维的开发或测试人员完成的他们需要的是“可预期、可回溯、可截图留证”的操作路径。图形界面每一步都有明确的视觉反馈比如安全组规则添加后立刻显示在列表中错误也直观如密钥对名称重复时弹出红色提示。更重要的是这种路径让你真正理解AWS资源之间的依赖关系——当你手动创建VPC、子网、安全组时你会自然意识到“实例必须属于某个子网子网必须属于某个VPC安全组必须显式关联到实例”而不是被CLI命令的黑盒输出所蒙蔽。2.2 为什么选择t2.micro作为首台实例类型t2.micro是AWS免费套餐Free Tier中唯一长期可用的通用型实例每月750小时免费足够个人学习和轻量测试。它的技术特性决定了它是最佳教学载体1 vCPU 1 GiB内存资源有限但足以运行Nginx、Python Flask等基础服务基于Intel Xeon处理器兼容性最广EBS存储为通用SSDgp2/gp3IOPS表现稳定。更重要的是它的限制条件本身就是绝佳的教学切入点——当你尝试在上面跑MySQLRedisNode.js三个服务时会立刻感受到内存不足的swap告警这比任何理论讲解都更能让你理解“实例规格选择”的实际意义。我们不推荐新手一上来就选t3.small或m5.large那会掩盖资源规划的核心逻辑。2.3 为什么密钥对必须本地生成并严格保管AWS控制台提供两种密钥对创建方式“创建新密钥对”和“导入现有密钥对”。本方案强制使用前者并强调“下载后立即备份”。原因在于私钥.pem文件是访问实例的唯一凭证AWS不会保存你的私钥副本一旦丢失实例将永久无法登录。这不同于传统密码密码丢了可以重置私钥丢了只能终止实例重建。很多教程轻描淡写说“记得下载”但没说清后果——我曾处理过一个客户案例开发人员在测试环境创建密钥对后因浏览器自动清理下载记录导致.pem文件丢失而实例上正跑着未提交的代码最终只能通过AMI快照恢复耗时4小时。因此本文在实操环节会嵌入三次确认提醒下载时检查文件扩展名是否为.pem、保存路径是否为易找回位置如桌面新建文件夹、以及用记事本打开验证文件头是否为“-----BEGIN RSA PRIVATE KEY-----”。这不是过度谨慎而是生产环境的基本素养。2.4 为什么安全组规则要“最小化开放”安全组是AWS的虚拟防火墙但新手常犯的错误是“全放开”——把入站规则设为0.0.0.0/0端口范围设为All TCP。这等于把服务器大门敞开。本方案只开放两个端口22SSH用于远程管理80HTTP用于后续Web服务测试。且22端口的源IP范围严格限定为你的公网IP可通过https://ifconfig.me获取而非0.0.0.0/0。这个设计背后是“纵深防御”原则即使你的密钥对意外泄露攻击者也无法从任意IP发起连接。实测数据显示开放22端口给0.0.0.0/0的实例在创建后15分钟内就会收到暴力破解扫描而限定源IP的实例可保持数月无异常连接请求。我们在实操中会演示如何用PowerShell一行命令自动获取当前IP并填入安全组避免手动输入出错。3. 核心细节解析与实操要点那些文档里不会写的坑3.1 密钥对转换.pem到.ppk为什么不能跳过这一步Putty不识别OpenSSL格式的.pem文件必须转换为Putty专用的.ppk格式。这是新手最大误区——很多人以为直接把.pem拖进Putty就能用。转换过程本身简单但有三个致命细节第一转换工具必须用PuttygenPutty套件自带不能用在线转换网站。因为私钥转换过程需在本地完成任何上传到第三方网站的行为都等同于交出服务器控制权。Puttygen下载地址是官方站点https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html认准“puttygen.exe”文件。第二加载.pem文件时Puttygen默认过滤器是“PuTTY Private Key Files (.ppk)”必须手动改为“All Files (.*)”才能看到.pem文件。这个下拉菜单藏在文件选择对话框右下角90%的人第一次会卡在这里反复点击“Open”却无反应。第三保存ppk文件时务必取消勾选“Encryption key passphrase”选项。虽然设置密码看似更安全但会导致Putty每次连接都弹窗要求输入密码而WinSCP在SFTP模式下无法传递该密码造成文件传输失败。正确的做法是用强密码保护你的Windows登录账户让私钥文件存放在受系统权限保护的目录中而非给私钥加二次密码。提示Puttygen转换后界面左上角会显示密钥指纹如“ssh-rsa 2048 xx:xx:xx...”请截图保存。这个指纹会在实例首次SSH连接时由Putty弹窗显示用于验证服务器身份真实性防止中间人攻击。如果弹窗指纹与你保存的不一致立即中断连接——说明可能遇到了DNS劫持或恶意代理。3.2 用户名陷阱ec2-user、ubuntu、centos到底该填哪个AWS不同AMI镜像预装的Linux发行版不同其默认SSH用户名也不同Amazon Linux 2 / Amazon Linux 2023ec2-userUbuntu ServerubuntuCentOS StreamcentosRHELec2-userRHEL 8或rootRHEL 7及更早很多人在Putty里填错用户名结果一直提示“Server refused our key”。这不是密钥问题而是认证阶段就被拒绝。解决方案是在AWS控制台启动实例时AMI选择页面右侧有清晰标注——例如选择“Ubuntu Server 22.04 LTS”时下方小字会注明“Default user: ubuntu”。把这个信息记在便签上贴在显示器边框。更稳妥的做法是在Putty的“Connection → Data”面板中直接填写用户名如ubuntu这样每次打开会话就自动填充避免手误。注意绝对不要尝试用root用户直接登录。Amazon Linux和Ubuntu都禁用了root密码登录且SSH配置中PermitRootLogin默认为no。强行修改会破坏AMI预设的安全策略增加维护风险。3.3 安全组配置不只是开22端口那么简单安全组规则有四个必填字段Type类型、Protocol协议、Port Range端口范围、Source源。新手常忽略的是Source字段的精确性如果你在家办公Source应填你家庭宽带的公网IP如112.65.33.128/32。注意末尾的/32表示只允许这一个IP访问。获取方法在Windows按WinR输入cmd在命令行中执行curl ifconfig.me需提前安装curl或直接访问https://ifconfig.me。如果你在公司Source应填公司出口防火墙的公网IP联系IT部门获取而非你电脑的局域网IP如192.168.x.x。如果IP不固定如家庭宽带动态IP可填/24网段如112.65.33.0/24但这会扩大暴露面仅作临时调试用。更关键的是安全组规则生效有延迟通常需30秒到2分钟。很多人添加规则后立刻点击“Connect”结果超时。正确做法是添加规则→等待1分钟→再测试连接。我们会在实操环节用Putty的“Event Log”功能验证连接尝试日志中若出现“Connection timed out”说明安全组或网络ACL未放行若出现“Server refused our key”说明密钥或用户名错误。3.4 WinSCP连接模式SFTP vs SCP选错就传不了文件WinSCP提供两种文件传输协议SFTPSSH File Transfer Protocol和SCPSecure Copy Protocol。对于EC2实例必须选择SFTP。原因在于SCP协议在较新版本的OpenSSHAmazon Linux 2默认安装中已被弃用启用需手动修改/etc/ssh/sshd_config风险高且不必要。SFTP是SSH的子系统复用同一SSH连接无需额外端口安全性更高。WinSCP的SFTP模式支持断点续传、同步目录、远程编辑等高级功能而SCP仅支持单文件复制。在WinSCP登录窗口“File protocol”下拉菜单必须选“SFTP”端口号保持22不变。如果误选“SCP”连接会失败并提示“Network error: Connection refused”。此时不要反复重试应关闭窗口重新选择SFTP协议。实操心得WinSCP连接成功后左侧是本地Windows文件系统右侧是远程EC2的Linux文件系统。首次进入时右侧默认路径是/home/ec2-user或/home/ubuntu。这里就是你的主目录所有上传的文件都会存放在此。切勿尝试上传到/var/www/html等系统目录——没有sudo权限会报错。后续部署Web服务时我们会用sudo cp命令将文件从家目录复制过去。4. 实操过程与核心环节实现从控制台到终端的完整链路4.1 创建密钥对下载、验证、备份三步法第一步登录AWS控制台https://aws.amazon.com/console/确保区域选择正确如us-east-1。在顶部搜索栏输入“EC2”进入EC2 Dashboard。第二步在左侧导航栏点击“Network Security”下的“Key Pairs”。点击右上角“Create key pair”。第三步在创建窗口中“Key pair name”填一个易识别的名字如my-first-ec2-key不能含空格或特殊字符“Key pair type”选“RSA”兼容性最好“Private key file format”选“pem”Puttygen可识别点击“Create key pair”。第四步浏览器会自动下载my-first-ec2-key.pem文件。此时立即执行三重验证位置验证检查下载路径建议新建文件夹C:\aws-keys\专门存放避免混入其他文件内容验证右键该文件→“打开方式”→“记事本”确认首行是-----BEGIN RSA PRIVATE KEY-----末行是-----END RSA PRIVATE KEY-----备份验证将该文件复制一份到OneDrive或Google Drive文件名改为my-first-ec2-key-backup-20240520.pem含日期。提示Windows默认隐藏文件扩展名。请在文件资源管理器中点击“查看”→勾选“文件扩展名”确保你看到的是.pem而非.pem.txt。曾有学员因系统自动添加.txt后缀导致Puttygen无法识别折腾两小时才发现。4.2 启动EC2实例AMI选择、实例类型、网络配置详解第五步回到EC2 Dashboard点击“Launch Instance”。第六步AMI选择——这是最关键的一步。在搜索框输入“Amazon Linux 2023”选择官方发布的“Amazon Linux 2023 AMI (HVM) - Kernel 6.1, SSD Volume Type”。右侧小字明确标注“Default user: ec2-user”这就是我们要的。第七步实例类型——在“General purpose”分类下选t2.micro。注意右上角有“Free tier eligible”绿色标签确认无误。第八步配置安全组——点击“Configure Security Group”选择“Create a new security group”“Security group name”填my-first-sg“Description”填For first EC2 instance在“Inbound rules”表格中点击“Add rule”TypeSSHSource点击下拉菜单选“My IP”控制台会自动填入你的公网IP如112.65.33.128/32再点“Add rule”TypeHTTPSource同样选“My IP”点击“Launch Instance”。第九步在“Select a key pair”页面下拉菜单中选择你刚创建的my-first-ec2-key并勾选复选框“Proceed without a key pair”下方的警告提示。点击“Launch Instances”。第十步实例启动后状态会从“pending”变为“running”。此时在实例列表中找到该实例复制其“Public IPv4 address”如3.220.123.45。4.3 Putty连接从密钥转换到首次登录的全流程第十一步下载Puttygenhttps://the.earth.li/~sgtatham/putty/latest/w64/puttygen64.exe双击运行。第十二步在Puttygen界面点击“Load”在文件类型中选“All Files (.)”找到并打开my-first-ec2-key.pem。弹窗提示“Try to load SSH-2 private key”点“Yes”。第十三步Puttygen会显示密钥信息左上角有指纹。点击“Save private key”保存为my-first-ec2-key.ppk路径与.pem文件相同。第十四步下载Puttyhttps://the.earth.li/~sgtatham/putty/latest/w64/putty64.exe双击运行。第十五步在Putty配置窗口“Host Name (or IP address)”填实例的Public IPv4 address3.220.123.45“Port”保持22左侧导航树展开“Connection”→“Data”在“Auto-login username”中填ec2-user展开“Connection”→“SSH”→“Auth”点击“Browse”找到并选中my-first-ec2-key.ppk返回“Session”在“Saved Sessions”中输入my-first-ec2点击“Save”。第十六步双击保存的会话Putty会弹窗显示服务器指纹。与你之前截图的Puttygen指纹对比完全一致则点“Yes”。几秒后终端显示[ec2-userip-172-31-12-34 ~]$表示连接成功。实操心得首次连接时Putty底部状态栏会显示“Using username ec2-user”这是正常流程。如果卡在“Connecting to...”超过30秒立即按CtrlC中断检查安全组是否生效等待1分钟再试或IP是否填错。4.4 WinSCP连接与文件传输验证SSH通道的双重价值第十七步下载WinSCPhttps://winscp.net/eng/download.php安装时取消勾选所有附加软件如McAfee。第十八步启动WinSCP点击“New site”在弹窗中“File protocol”选“SFTP”“Host name”填实例IP3.220.123.45“Port number”填22“User name”填ec2-user“Password”留空因为我们用密钥登录点击“Advanced”展开“Authentication”勾选“Attempt authentication using Pageant”可选提升体验然后在“Private key file”中浏览并选中my-first-ec2-key.ppk点击“OK”保存。第十九步双击刚创建的站点WinSCP会弹出密钥确认窗口点“Yes”。连接成功后右侧窗口显示/home/ec2-user/目录。第二十步测试文件传输——在本地Windows桌面新建一个文本文件test-upload.txt内容为“This is my first AWS upload.”。将其拖拽到WinSCP右侧窗口空白处。几秒后右侧出现同名文件双击打开验证内容一致。提示WinSCP右键菜单有“Keep remote directory up to date”开启后本地文件修改会自动同步到远程极大提升开发效率。但注意此功能需在“Options → Preferences → Background”中启用后台同步。5. 常见问题与排查技巧实录从报错日志反推根本原因5.1 连接超时Connection timed out网络层问题定位这是最常见报错日志特征为Putty显示“Network error: Connection timed out”。根本原因只有三个按优先级排查排查步骤操作方法预期结果失败说明1. 检查实例状态EC2控制台查看实例状态是否为“running”且“Status checks”两项均为“2/2 checks passed”状态正常若为“initializing”或“stopped”需重启实例2. 检查安全组入站规则在实例详情页→“Security”标签页确认安全组中SSH规则的Source是你的IP且Port Range22规则存在且正确若Source为0.0.0.0/0说明配置错误若无SSH规则需手动添加3. 检查网络ACL在VPC控制台→“Network ACLs”找到实例所在子网关联的ACL确认入站规则允许22端口Rule #100入站规则存在默认ACL允许所有流量但自定义ACL可能限制需检查独家技巧在Putty中点击“Window”→“Event Log”连接失败时日志会明确显示“Looking up host 3.220.123.45... Connecting to 3.220.123.45 port 22... Network error: Connection timed out”。这个日志证明请求根本未到达服务器问题一定在AWS网络层安全组/ACL/路由表而非服务器内部。5.2 密钥被拒绝Server refused our key认证层问题定位Putty日志显示“Server refused our key”说明TCP连接已建立但SSH认证失败。原因有三原因一用户名错误解决方案确认AMI类型Amazon Linux用ec2-userUbuntu用ubuntu。在Putty的“Connection → Data”中修改后重连。原因二私钥格式错误解决方案用记事本打开.ppk文件首行应为PuTTY-User-Key-File-2: ssh-rsa。若开头是-----BEGIN RSA PRIVATE KEY-----说明你误用了.pem文件而非.ppk文件。原因三密钥未正确关联到实例解决方案在EC2控制台实例详情页→“Security”标签页确认“Key pair name”显示为你创建的my-first-ec2-key。若为空说明启动时未选择密钥对需终止实例重建。实操心得当遇到“Server refused our key”时不要反复点击“Retry”。Putty有连接尝试次数限制连续失败5次会触发服务器端临时封禁。正确做法是关闭Putty→检查上述三项→等待30秒→重新连接。5.3 WinSCP连接失败SFTP子系统未启用WinSCP报错“Network error: Connection refused”或“Timeout detected”但Putty能连上说明问题出在SFTP协议层。根本原因是某些精简版AMI如部分CentOS镜像默认禁用SFTP子系统。解决方案需先用Putty登录# 1. 编辑SSH配置文件 sudo nano /etc/ssh/sshd_config # 2. 找到以下行通常在文件末尾取消注释并确保值为yes Subsystem sftp /usr/libexec/openssh/sftp-server # 3. 重启SSH服务 sudo systemctl restart sshd注意修改前务必用sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup备份原文件。nano编辑器中CtrlO保存CtrlX退出。5.4 文件上传权限错误Operation not permittedWinSCP上传文件到/var/www/html/时提示“Permission denied”这是因为ec2-user没有该目录的写入权限。标准解决方案符合Linux权限规范# 1. 将文件先上传到家目录/home/ec2-user/ # 2. 用sudo命令复制到目标目录 sudo cp /home/ec2-user/index.html /var/www/html/ # 3. 修改文件所有者为apacheAmazon Linux或www-dataUbuntu sudo chown apache:apache /var/www/html/index.html # Amazon Linux # 或 sudo chown www-data:www-data /var/www/html/index.html # Ubuntu关键原理Linux中普通用户只能修改自己拥有或所属组拥有的文件。/var/www/html/属于root用户ec2-user无权直接写入。通过sudo cp提升权限再用chown确保Web服务器进程apache/www-data能读取文件这才是生产环境的标准做法。6. 后续可扩展方向从单实例到可持续运维的跃迁当你能稳定连接并上传文件后真正的云运维才刚开始。这里给出三条经过验证的进阶路径每条都对应一个真实业务场景路径一自动化部署适合开发人员用AWS Systems Manager Run Command无需SSH即可批量执行命令。例如一键在10台实例上安装Nginx在EC2控制台→“Systems Manager Services”→“Run Command”选择AWS-RunShellScript输入sudo amazon-linux-extras install nginx1 -y sudo systemctl start nginx。这比写Shell脚本更安全因为所有操作都在AWS可信环境中执行无需暴露SSH端口。路径二基础设施即代码适合运维工程师将本次手动创建的资源用AWS CloudFormation模板描述。一个YAML文件就能定义VPC、子网、安全组、EC2实例、密钥对。下次启动环境只需点击“Create Stack”5分钟内全自动部署。模板中可设置参数如实例类型、密钥对名称实现一次编写、多环境复用。路径三监控与告警适合架构师启用Amazon CloudWatch为EC2实例添加基本指标监控CPU利用率、网络流入/流出。当CPU持续高于80%达5分钟自动发送邮件告警。这不需要额外安装AgentCloudWatch Agent已预装在Amazon Linux 2023中只需在控制台启用即可。最后分享一个小技巧在Putty中按AltPrintScreen可截取当前终端屏幕含滚动历史比Windows截图工具更精准。我常用这个功能记录每次操作的命令和输出形成自己的故障排查知识库。这些截图按日期命名存放在OneDrive随时可检索——这才是对抗遗忘最有效的武器。