Skip to content

AWS

亚马逊云站渠道代理商:EC2 SSH 连接失败排查与修复指南 解决超时与权限报错

本文由 亚马逊云站代理商『翼龙云/TG @Yilongcloud 撰写』如需转载请注明!
作者:翼龙云/Yilongcloud

在使用 AWS EC2 Linux 实例时,SSH 远程连接失败是开发者常遇到的技术阻碍。无论是刚开始接触 AWS 的新手,还是进行日常维护的工程师,都需要一套清晰的排障流程来定位问题。

本文将针对常见的 SSH 报错现象,从网络连通、子网 NACL、安全组规则、认证凭据、实例系统内部设置五个层面提供排查建议。

现象诊断:识别 SSH 报错类型

在调整配置前,请先确认终端返回的具体报错信息,这决定了排查的方向:

  • Connection timed out(连接超时):请求未到达实例。通常与公网 IP、VPC 路由表、NACL、安全组或本地出站网络限制有关。
  • Connection refused(连接被拒绝):网络已接通,但实例内部的 SSH 服务(sshd)未运行,或系统内部防火墙拦截了 22 端口、sshd 配置异常。
  • Permission denied (publickey)(权限被拒绝):网络连接正常,但身份验证失败。常见于密钥文件权限错误、密钥对不匹配、登录用户名错误、磁盘空间占满、sshd 配置限制。

第一步:网络连通性与公网 IP 排查

若出现 “连接超时”,请检查实例是否具备基础的公网访问能力:

  1. 确认公网 IP 状态在 EC2 控制台检查实例是否分配了 “公网 IPv4 地址” 或关联了弹性公网 IP(Elastic IP)。

计费提示:EC2 实例运行自带的公网 IPv4 不会单独计费;仅闲置未绑定实例的 EIP 弹性 IP 会产生占用费用,请确保资源配置符合预期。

  1. 检查 VPC 路由表配置确保实例所在的子网为公有子网:
  • 在子网的 “路由表” 选项卡中,检查是否存在一条目标为 0.0.0/0且下一跳指向 Internet Gateway(igwxxxxxxxx)的路由记录。若缺失此项,外部流量将无法触达实例。
  1. 检查子网网络 ACL (NACL)NACL 属于子网层面无状态防火墙,独立于安全组。确认入站允许 TCP 22 端口,出站允许应答流量;NACL 拒绝端口同样会直接引发连接超时。
  2. 本地网络校验部分企业办公 WiFi 会拦截本机出站 22 端口,可以切换手机热点测试,区分是云端问题还是本地网络限制。

第二步:核对安全组(Security Group)入站规则

安全组是实例的虚拟防火墙。即使网络通畅,规则未放行也会导致连接失败:

  1. 进入实例的 “安全” 选项卡,点击关联的安全组。
  2. 在 “入站规则” 中,确认已添加允许 TCP 22 (SSH) 端口的规则。
  3. 源 IP 限制:建议将源 IP 设置为 “我的 IP”,避免使用 0.0.0/0全网开放以降低安全风险。若本地网络环境发生变化(如切换 WiFi),需同步更新此处的允许 IP。

补充:EC2 Instance Connect 互联网模式,不需要安全组入站放开 22 给 AWS 公网 IP 段,仅要求实例具备公网出站能力。

第三步:验证 SSH 密钥权限与默认用户名

若出现 “权限被拒绝”,请重点检查认证环节:

私钥文件权限设置

Linux 或 macOS 用户需确保 .pem 文件权限为 400。权限过大会导致 SSH 客户端出于安全原因拒绝使用该密钥:

chmod 400 yourkeypair.pem

ssh -i “yourkeypair.pem” ec2user@<公网IP地址>

Windows PowerShell 环境,需要修改文件安全属性,禁止其他账户读取私钥文件。

重要提醒:AWS 云端不会保存 pem 私钥,仅在创建实例时可下载一次,丢失私钥无法直接 SSH 登录。

确认不同 AMI 的默认用户名

不同操作系统镜像(AMI)的默认登录名不同,root 账号绝大多数官方镜像默认禁止 SSH 登录。

表格

操作系统 (AMI) 默认 SSH 用户名
Amazon Linux 2 / 2023 ec2user
Ubuntu ubuntu
CentOS / Rocky Linux / AlmaLinux centos 或 ec2user
Debian debian
RHEL(RedHat Enterprise Linux) ec2user
SUSE Linux ec2user

第四步:实例系统内部深度排查

以上网络、密钥全部正常仍然报错,需要考虑实例内部问题:

  1. sshd 服务是否正常运行;
  2. 操作系统内部防火墙 firewalld /ufw 是否拦截 22 端口;
  3. 磁盘 100% 占满:根分区存储空间耗尽,会直接出现公钥鉴权失败,无法 SSH 登录;
  4. /etc/ssh/sshd_config配置异常,公钥登录策略被关闭。

两套应急登录方案(本地 SSH 故障兜底)

方案 1:EC2 Instance Connect(浏览器 SSH)

控制台选中实例 → 点击【连接】→选择 EC2 Instance Connect。

  • 互联网模式:实例拥有公网 IP,无需修改安全组入站;
  • 私有子网无公网 IP:需要部署ec2instanceconnectVPC 终端节点。

方案 2:SSM Session Manager(生产环境推荐)

无需公网 IP、无需开放 22 端口、不需要 pem 私钥。 前提条件:实例预装 SSM 代理,实例 IAM 角色绑定AmazonSSMManagedInstanceCore托管策略。适合私有子网实例,也是 AWS 官方推荐运维接入方式。

常见问题解答(FAQ):

Q1:AWS EC2 SSH 连接超时的常见原因有哪些?

  1. 实例未绑定公网 IP;
  2. 公有子网路由表缺少指向 Internet Gateway 的默认路由;
  3. 安全组入站未放行 TCP 22;
  4. 子网 NACL 拦截 22 端口;
  5. 本地办公网络出站 22 端口被防火墙拦截。

Q2:pem 私钥文件丢失,无法 SSH 登录怎么办?

  1. 优先使用 SSM Session Manager 登录,将新的公钥写入~/.ssh/authorized_keys;
  2. 未部署 SSM 代理:停止实例,将系统盘挂载到临时救援实例修改 authorized_keys 文件。

Q3:Connection refused 报错一般是什么原因?

sshd 服务未启动;操作系统内部防火墙拦截 22 端口;sshd_config 配置错误。

Q4:生产环境如何加固 SSH 访问?

优先使用 SSM Session Manager 做运维,尽量不在安全组开放 22 端口至全网;妥善保管私钥,定期轮换密钥,关闭密码登录。

文章标签