EC2 Ubuntu实例复用密钥对PuTTY公钥认证错误排查
前置说明:本次报错信息通用性极强,几乎无法判定该问题为已有重复问题,本次属于较为细分的特殊场景,请不要误将其标记为重复问题。
问题背景
- 现有2台运行Ubuntu系统的EC2实例:第一台创建于6个月前,运行状态、PuTTY连接均正常;第二台为当日新建,创建时选择复用第一台绑定的同一keypair
- 两台实例位于同一可用区但归属不同基础VPC,密钥对直接从EC2控制台密钥对列表选择,按平台规则密钥对支持跨VPC生效
- 两台实例默认登录用户均为
ubuntu,连接操作时直接克隆已保存的第一台实例的PuTTY配置,仅修改目标实例公网IP后发起连接,收到如下报错:
PuTTY Fatal Error: Disconnected: No supported authentication methods available (server sent: publickey)
- 初步排查阶段已确认:登录用户名
ubuntu填写正确、控制台显示的实例绑定密钥对名称与使用的私钥匹配,按密钥对设计逻辑同一.ppk文件可对所有绑定该密钥对的实例生效,最初推测为平台未将密钥对正确关联到新实例 - 复现验证:销毁原异常实例后重新创建新实例,导入另一把完全不同的公钥,使用其匹配的
.ppk文件连接,仍然触发相同的认证报错
该问题的可能触发原因
- PuTTY本地配置错误
- 克隆旧配置时私钥加载路径失效,或配置中误关闭了公钥认证选项、开启了服务端不支持的认证方式
- 若使用Pageant管理私钥但未在Pageant中加载对应实例的私钥、私钥passphrase输入错误,会直接触发公钥认证失败
- 本地PuTTY版本过旧,不支持新实例OpenSSH服务端默认启用的公钥算法:新版本Ubuntu默认禁用老旧的
ssh-rsa算法,0.75以下版本的PuTTY未适配该变更,会导致公钥协商阶段直接失败
- 实例启动阶段公钥注入失败
- 实例启动时cloud-init服务执行异常,未成功将控制台配置的公钥写入
/home/ubuntu/.ssh/authorized_keys文件。常见触发场景包括:加密根卷未授予EC2服务对应的KMS密钥访问权限、实例启动时访问元数据服务超时、使用的自定义镜像内置cloud-init配置损坏 - 新实例所用镜像存在SSH配置或权限异常:若使用第三方修改的Ubuntu镜像,可能存在默认SSH配置篡改,或
ubuntu用户家目录、.ssh目录、authorized_keys文件权限不符合SSH安全校验要求(家目录权限需为755、.ssh目录权限需为700、authorized_keys文件权限需为600,权限不符合时sshd会直接拒绝读取公钥文件,无额外报错提示)
- 实例启动时cloud-init服务执行异常,未成功将控制台配置的公钥写入
- 网络链路拦截导致认证失败
- 新实例所属VPC的安全组、网络ACL存在规则拦截SSH会话相关报文,或VPC端点、路由配置错误导致实例元数据服务访问失败,公钥无法正常注入
- 本地到新实例公网IP的链路中存在透明代理、流量清洗设备,篡改或丢弃了SSH公钥协商阶段的报文,导致认证流程中断
- 实例侧SSH服务配置异常
- 新实例启动时sshd服务加载了错误配置,公钥认证选项被设为关闭,或配置了不允许
ubuntu用户通过公钥方式登录的规则
- 新实例启动时sshd服务加载了错误配置,公钥认证选项被设为关闭,或配置了不允许
内容的提问来源于stack exchange,提问作者m12lrpv
相关产品推荐
相关产品推荐

