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

AWS两实例共用密钥对,其一SSH登录报Permission denied (publickey)

解决EC2实例同一密钥对登录出现Permission denied (publickey)的问题

这种情况确实挺闹心的——同一密钥对能正常登录一个EC2实例,却在登录另一个时遇到Permission denied (publickey)错误,而且你已经试过常规方案还没解决。我来分享几个针对性的排查和修复步骤,说不定能帮你搞定:

1. 先确认目标实例的网络访问规则

虽然你之前能正常登录,但安全组或网络ACL的规则可能被意外修改:

  • 登录AWS控制台,找到出问题的EC2实例,查看它关联的安全组,确认入站规则里是否允许你的公网IP访问22端口(或者临时放开0.0.0.0/0测试,测试完记得改回去)
  • 检查实例所在子网的网络ACL,确保入站规则允许22端口流量,出站规则允许所有响应流量

2. 验证目标实例的authorized_keys文件(核心排查点)

密钥对本身没问题,但目标实例里的authorized_keys文件可能丢失了对应公钥或被篡改。由于你没法直接登录,可通过挂载根卷到正常实例的方式检查:

  1. 停止出问题的EC2实例,分离它的根卷(注意不要删除卷)
  2. 把这个根卷挂载到你能正常登录的另一个EC2实例上,比如挂载到/mnt/rescue目录
  3. 在正常实例上执行以下命令对比公钥:
    # 生成本地pem文件对应的公钥
    ssh-keygen -y -f mypem.pem
    # 查看目标实例authorized_keys里的内容
    cat /mnt/rescue/home/ec2-user/.ssh/authorized_keys
    
  4. 如果两者不一致,把本地生成的公钥添加到/mnt/rescue/home/ec2-user/.ssh/authorized_keys文件中
  5. 卸载根卷,重新挂载回原EC2实例,启动后再尝试登录

3. 检查文件和目录的权限

就算公钥正确,权限配置错误也会导致SSH拒绝认证:
挂载根卷后,执行以下命令检查并修复权限:

# 修改ec2-user家目录权限
chmod 700 /mnt/rescue/home/ec2-user
# 修改.ssh目录权限
chmod 700 /mnt/rescue/home/ec2-user/.ssh
# 修改authorized_keys文件权限
chmod 600 /mnt/rescue/home/ec2-user/.ssh/authorized_keys

权限必须严格符合上述要求,否则SSH会认为文件不安全而拒绝使用。

4. 检查sshd服务的配置

有时候sshd的配置被修改,导致公钥认证被禁用:
挂载根卷后,打开/mnt/rescue/etc/ssh/sshd_config文件,确认以下配置项:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

如果配置项被设为no或者路径错误,修改后保存,再把卷放回原实例启动。

5. 查看系统日志定位具体错误

AWS控制台提供了EC2实例的系统日志,能帮你快速定位问题:

  • 在EC2实例详情页,找到“获取系统日志”选项,下载或查看日志内容
  • 搜索sshd相关的日志条目,比如类似Failed publickey for ec2-user from xxx.xxx.xxx.xxx port xxxxx ssh2: RSA SHA256:xxxx的信息,这能直接告诉你是公钥不匹配、权限问题还是其他配置错误

如果以上所有步骤都试过还是无法解决,你可以考虑创建新的密钥对,通过挂载根卷的方式替换目标实例的authorized_keys文件,或者创建新的EC2实例并迁移数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:28