AWS账号出售:利用AWS SSM Session Manager实现无公网IP、无密钥安全登录EC2
在传统的云服务器运维里,要登录一台 Linux EC2,标准配置通常是:给服务器绑定一个公网 IP(或者走 NAT 网关),在安全组上放行 TCP:22 端口,然后本地配置好 SSH 密钥(.pem 文件),最后通过终端连上去。
但这套跑了十几年的标准流程,在现代企业级安全规范下,正面临巨大的挑战:
- 公网裸奔风险:只要开了 22 端口,不管你改不改默认端口,每天都会有成千上万个黑客脚本在疯狂扫描、暴力破解。
- 密钥管理灾难:密钥文件一旦分发给多个开发或运维,极易发生员工离职未销毁、密钥不小心误传到公共 GitHub 的重大安全事故。
- 成本高昂:为了不给服务器配公网 IP,很多团队不得不花钱搭堡垒机(Jumpbox)或者配置复杂的 VPN 隧道,增加了不小的日常预算。
在 AWS 体系里,有一个堪称降维打击的免费高级玩法,能完美干掉上面所有的痛点,它叫 AWS Systems Manager Session Manager(会话管理器)。
今天不扯复杂的安全理论。手把手带你配通全流程,实现服务器不需要公网 IP、安全组不需要开任何端口、本地不需要任何 .pem 密钥文件,就能稳稳登录 EC2 终端。
第一阶段:深度拆解,Session Manager 的“反向连接”黑科技
为什么不需要公网 IP 和 22 端口,我们还能远程连上服务器?
传统的 SSH 登录是正向连接:你的电脑作为客户端,主动穿过公网,去敲 EC2 服务器的 22 端口大门。这就要求服务器必须有公网入口,大门必须敞开。
Session Manager 采用的是反向连接逻辑:
- 你的 EC2 服务器内部,安装了一个叫 SSM Agent 的官方小守护进程。
- 这个进程不需要外部流量进来,它自己会主动由内向外(Outbound),通过 HTTPS(443 端口)跟 AWS 官方的 SSM 服务端建立一个安全的双向持久长连接。
- 当你登录 AWS 控制台或者通过本地 AWS CLI 想要连接服务器时,你的请求先发给 AWS SSM 服务端,服务端再通过刚才那条早已建好的内网管道,把指令传给 EC2 内部的 Agent 执行。
核心安全结论:因为流量全是由内向外发的,你的 EC2 安全组入站规则可以完全清空(彻底关闭所有入站端口),连黑客拿探测器都找不到你服务器的存在,安全直接拉满。
第二阶段:实战演练一——赋予 EC2 说话的权利(IAM 角色配置)
EC2 要想主动去连 AWS 的 SSM 服务端,它必须获得你的授权。在 AWS 里,给资源授权的唯一通行证叫 IAM Role(身份与访问管理角色)。
- 登录 AWS 控制台,搜索并进入 IAM 服务。
- 点击左侧菜单“角色(Roles)” -> “创建角色(Create role)”。
- 受信实体类型选择“AWS 服务”,服务或用例选择 EC2。点击下一步。
- 添加权限策略(关键点):在搜索框里输入 AmazonSSMManagedInstanceCore(这是 AWS 官方专门为 Session Manager 定制的最小化核心权限策略),勾选它。
- 点击下一步,给角色起个名字,比如 EC2-SSM-Access-Role,点击创建。
第三阶段:实战演练二——启动一台“全面封闭”的私有 EC2
地基打好了,我们现在去拉起一台服务器做真实测试。
- 进入 EC2 控制台,点击“启动实例”。
- 系统镜像(AMI):强烈建议选择最新的 Amazon Linux 2023 或 Amazon Linux 2。避坑提示:这两款系统默认已经内置安装并开机自启了 SSM Agent,不需要你再手动敲命令去装。如果你选的是原生的 Ubuntu 或 CentOS,启动后需要自己用 apt 或 yum 手动装一下 SSM Agent 软件。
- 实例类型:随便选个免费级别的 t3.micro。
- 密钥对(Key pair):直接在下拉菜单里选择 “在没有密钥对的情况下继续”(真正体验无密钥登录的爽快)。
- 网络设置(成本与安全精算):自动分配公网 IP:选择 “禁用”。我们不需要公网 IP。安全组入站规则:把默认带的“允许 SSH 22 端口”那条规则直接点击垃圾桶删掉。保持入站规则空空如也。
- 高级详细信息(注入灵魂):往下翻,找到 “IAM 实例配置文件(IAM instance profile)”。下拉菜单里,精准选中我们在第二阶段创建好的 EC2-SSM-Access-Role。
点击启动实例。
第四阶段:见证奇迹的时刻——三种高能登录方式
服务器启动 2~3 分钟后,确保底层的 SSM Agent 已经成功和云端接上头。我们来看怎么进去系统。
方式一:控制台一键直达(懒人最爱)
- 在 EC2 实例列表里,选中你刚刚建好的那台无公网、无端口的服务器。
- 点击顶部的 “连接(Connect)”。
- 切换到 “会话管理器(Session Manager)” 标签页(你会发现由于配置正确,原本灰色的“连接”按钮已经亮起)。
- 点击“连接”。浏览器会瞬间弹出一个纯黑色的原生终端,你已经是 ssm-user 权限了,执行 sudo su - 直接提权到 root 完美控盘。
方式二:本地终端直接连(专业运维流)
很多资深运维不喜欢用浏览器写代码,习惯了本地的本地终端(如 Mac Terminal、iTerm2 或 Windows PowerShell)。没问题,Session Manager 同样支持。
- 确保你本地电脑安装了 AWS CLI 工具,并且通过 aws configure 配置好了你个人的 IAM 访问密钥。
- 本地电脑需要额外装一个免费的小插件叫 Session Manager Plugin(去 AWS 官网下载对应操作系统的安装包,一步无脑安装)。
- 打开你本地的终端,直接敲下这行命令(把实例 ID 换成你自己的):Bashaws ssm start-session --target i-0123456789abcdef0 没有任何密钥提示,不需要输入密码,一秒钟后,你的本地终端直接跨越宇宙,接入到了那台没有公网 IP 的云服务器内部。
第五阶段:企业级高级审计——谁在我的服务器里干了啥?
如果以为 Session Manager 只是为了图省事,那就小看 AWS 的大厂规范了。它真正被金融、证券等高合规要求企业青睐的核心原因,是它自带完美的无死角审计流水线。
传统的 SSH 登录,开发人员连进去删了什么文件、改了什么配置,除非你在系统内部大费周章地配日志转储,否则很难追查。
在 AWS Systems Manager 的设置里,你可以配置将会话日志直接开启投递:
- 投递到 S3 存储桶:用户在终端里敲下的每一行命令、屏幕上打印出的每一个字符(包含退格、报错),都会被实时录制成加密文本文件,上传到 S3 永久封存。
- 投递到 CloudWatch Logs:实现实时日志告警。
即使某个拥有最高权限的运维在服务器里执行了 rm -rf,他也没办法删掉已经飞到 S3 审计桶里的铁证。谁做的操作,什么时间做的,一查便知,满足最严格的合规审计要求。
第六阶段:日常运维的避坑血泪史
- 连接提示“实例未注册或未在线”:新拉起服务器后,如果发现控制台连接按钮是灰色的,99% 是因为你的私有子网(Private Subnet)完全断网了。虽然 SSM Agent 是由内向外发请求,但如果你的私有子网既没有配置 NAT 网关,也没有配置 VPC Endpoints(终端节点),Agent 连 AWS 官方域名的 HTTPS 流量都发不出,就会彻底失联。确保私有网络至少能连通 AWS 服务的公网域名,或者在 VPC 内新建 ssm、ssmmessages、ec2messages 这三个 VPC 终端节点。
- 权限卡得太死导致团队无法协作:Session Manager 不再认 .pem 文件,它认的是个人的 AWS IAM 用户权限。如果想让新来的开发小张能登录这台机器,你需要在 IAM 里给他个人的账号追加一条允许对该 EC2 实例执行 ssm:StartSession 的策略。用 IAM 彻底取代物理密钥的分发,才是现代云原生的正道。
总结
利用 AWS SSM Session Manager 登录 EC2,本质上是用现代身份认证(IAM)取代了古老的网络认证(22端口与物理密钥)。用好这套免费的黑科技,不仅能帮你砍掉不必要的堡垒机和公网 IP 预算,更能让你的云端基础设施在公网上“瞬间隐身”。安全与便利兼得,这才是优雅、地道的云上运维标准姿势。
