Windows 11通过SSH连接AWS EC2实例报公钥权限拒绝问题解决
Windows 11 下OpenSSH连接AWS EC2 Ubuntu实例提示
Permission denied (publickey) 问题背景
已完成如下前置配置:
- 完成Windows端OpenSSH组件安装
- 按照官方密钥管理规范完成OpenSSH本地密钥配置
- 将本地生成的公钥通过AWS控制台导入目标EC2实例
- 本地执行连接命令:
ssh -i "C:\Users\{用户名}\.ssh\{私钥文件名}" ubuntu@{EC2实例公网域名}
执行命令后连接直接失败,返回错误:Permission denied (publickey).
已完成排查项
- 多次调整本地私钥文件权限:先后配置为仅当前登录账户可访问、将账户权限从完全控制下调为仅读取,均未解决
- 分别生成RSA、ED25519两种算法的密钥对重试连接,报错一致
- 切换到WSL环境通过
chmod命令修改私钥权限后重试,仍连接失败 - 已确认排除基础故障:本地OpenSSH功能正常,可通过密码认证连接其他支持密码登录的SSH主机;实例侧网络、登录账号无异常,使用对应密钥转换生成的.ppk文件通过Putty可正常连接该实例。因业务场景要求必须使用原生OpenSSH连接,需要解决该公钥认证报错。
解决方案
问题根因:控制台导入公钥的操作未实际生效,公钥未被写入实例侧的信任密钥列表
修复步骤如下:
- 通过可正常连接实例的方式(如Putty、AWS Session Manager)登录目标EC2实例
- 执行命令调整.ssh目录权限:
cd ~ chmod 700 .ssh
- 打开
~/.ssh/authorized_keys文件,将本地OpenSSH生成的公钥完整内容追加到文件末尾,注意不要出现折行、多余空格或字符缺失 - 执行命令调整授权文件权限:
chmod 600 ~/.ssh/authorized_keys
- 退出实例登录,回到Windows本地重新执行OpenSSH连接命令即可正常连接。
踩坑提示:AWS控制台的密钥对导入、绑定操作,仅会在实例首次启动初始化阶段自动将公钥写入实例内部的授权文件,对于已经运行的存量实例,控制台的密钥操作不会自动同步公钥到实例中,这是该类报错非常高频的诱因。如果本地私钥权限、密钥格式都排查无误,优先登录实例核对
authorized_keys文件内是否存在和本地完全匹配的公钥内容即可快速定位问题。
内容的提问来源于stack exchange,提问作者masonjacob
相关产品推荐
相关产品推荐

