You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows通过OpenSSH/Bitvise访问EC2实例报公钥权限拒绝错误

Windows 系统连接 AWS EC2 报 Permission denied (publickey) 解决方案

按以下优先级逐一排查,90%以上的同类问题都能解决:

1. 先确认登录用户名匹配实例AMI

不要默认所有实例都用ec2-user,不同系统镜像的默认登录用户名完全不同,填错用户名会直接触发公钥认证失败:

  • Amazon Linux 2/Amazon Linux 2023:ec2-user
  • Ubuntu 官方镜像:ubuntu
  • Debian 官方镜像:admin
  • RHEL/CentOS Stream 官方镜像:ec2-user
  • SUSE 官方镜像:ec2-user
  • 自定义镜像:使用制作镜像时配置的用户名

2. 排除密钥不匹配、实例内公钥损坏问题

本地存储的.pem文件和实例绑定的密钥对不匹配、实例内~/.ssh/authorized_keys文件损坏是该报错最高发的原因,新手最稳妥的排查/修复方式:

  1. 打开EC2控制台,选中目标实例,先停止实例(仅停机不会删除数据,不要点终止)
  2. 右键实例选择「实例设置-编辑用户数据」
  3. 粘贴以下配置,将<替换为你本地pem对应的公钥全文>替换为实际内容:公钥是pem文件对应的以ssh-rsa或ssh-ed25519开头的一整行字符串,可以在PowerShell里执行ssh-keygen -y -f 你的pem文件完整路径直接导出公钥内容
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [users-groups, once]
users:
  - name: ec2-user
    ssh-authorized-keys:
    - <替换为你本地pem对应的公钥全文>
  1. 保存用户数据后启动实例,等实例状态检查全部通过后再尝试连接

如果你用的是Ubuntu等其他系统镜像,把上面配置里的name: ec2-user改成对应系统的默认用户名即可

3. 修正Windows下.pem文件的权限配置

你之前执行的icacls命令遗漏了权限清理的关键步骤,Windows OpenSSH客户端会强制校验密钥文件权限,只要存在任何非授权用户的访问权限,就会拒绝加载密钥,哪怕你能正常打开文件也不行。正确配置步骤:

  1. 找到本地.pem文件,右键选择「属性-安全-高级」
  2. 点击「禁用继承」,选择「将已继承的权限转换为此对象的显式权限」
  3. 删除所有权限条目里的非授权账户,包括Administrators、Users、Authenticated Users等所有组/用户,仅保留你当前登录Windows的个人账户、SYSTEM账户两个条目
  4. 给两个保留的条目仅分配「读取、读取和执行」权限即可,不要开完全控制权限,权限过高同样会被OpenSSH判定为不安全
    如果用PowerShell执行命令配置,直接运行以下代码,替换为你的pem文件实际路径:
$pemPath = "C:\你存放pem文件的完整路径\my_pem_file.pem"
icacls $pemPath /reset
icacls $pemPath /inheritance:r
icacls $pemPath /grant:r "$($env:USERNAME):(R)"
icacls $pemPath /grant "SYSTEM:(R)"

4. 正确执行连接命令

用Windows自带OpenSSH连接时,不要省略密钥参数,避免客户端加载错误路径下的其他密钥,标准连接命令格式:

ssh -i "你的pem文件完整路径" 正确用户名@EC2公网IP或公网域名

举个实际例子:pem存在当前用户下载文件夹,实例是Amazon Linux、公网IP为54.xx.xx.xx,命令为:

ssh -i "C:\Users\你的Windows用户名\Downloads\my_pem_file.pem" ec2-user@54.xx.xx.xx

如果用Bitvise连接,在密钥导入环节确认选中的是对应正确的pem文件,不要选错本地其他密钥。

5. 排查网络与实例服务问题

  • 确认实例的2项状态检查全部通过,实例刚启动时SSH服务需要1-2分钟加载,刚开机就连接会报错
  • 确认安全组入站规则放通了你当前网络的出口公网IP的22端口,不要只设置0.0.0.0/0就认为规则正确,部分本地网络运营商、公司防火墙会拦截22端口出站请求
  • 可以先在EC2控制台通过网页端的实例连接功能登录实例,如果网页端能正常登录,直接查看对应用户主目录下~/.ssh/authorized_keys文件内容,确认里面存储的公钥和你本地pem的公钥一致,不一致就把本地公钥追加到文件末尾,保存后即可正常连接

内容的提问来源于stack exchange,提问作者Advait Kulkarni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 11:27:14