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

从.pem派生的.ppk可连接EC2,但原.pem无法连接的问题求助

AWS EC2:.pem密钥无法连接但派生.ppk可用的问题排查与解决

问题背景

拥有AWS EC2实例及对应.pem密钥文件,尝试传输文件时遇到以下情况:

  • MobaXterm用未修改权限的.pem连接,报错:Server refused our key / No supported authentication methods available (server sent: publickey)
  • PuTTY用.pem派生的.ppk可正常连接
  • WinSCP用两种密钥均报错
  • 本地执行ssh -l user -i abc.pem user@ip偶尔成功
  • 执行chmod 400 abc.pem后,上述工具连接仍失败;将.pem复制到服务器执行ssh-add后重启实例,MobaXterm仍无法连接;新实例用修改权限后的.pem也连接失败
  • 服务器~/.ssh/authorized_keys已有一行ssh-rsa AAAAB3Nza....格式的公钥

核心原因分析

1. 本地.pem文件的权限与格式问题

Windows系统不支持Unix-style权限位,即使在Git Bash/WSL执行chmod 400,部分Windows原生SSH工具(如MobaXterm的某些版本)可能无法识别该权限,仍会判定文件权限过于开放导致密钥被拒绝。
另外,.pem文件可能存在格式问题:比如包含Windows换行符(CRLF)、多余空行或空格,而PuTTYgen在转换为.ppk时会自动修复这些格式错误,所以.ppk能正常使用。

2. EC2实例端的SSH配置与权限问题

你只关注了本地密钥的权限,却忽略了服务器端~/.ssh目录及authorized_keys文件的权限要求——这是公钥认证失败的常见原因:

  • .ssh目录权限必须为700(仅所有者可读可写可执行)
  • authorized_keys文件权限必须为600(仅所有者可读可写)
    如果权限过松,sshd会拒绝使用该文件中的公钥。

3. SSH命令的参数冗余

你之前执行的ssh -l user -i abc.pem user@ip存在参数冗余:-l user和user@ip重复指定了用户名,部分情况下OpenSSH会解析异常,导致连接不稳定。

解决步骤

第一步:验证本地.pem的有效性

  1. 用PuTTYgen打开.pem文件,确认能正常加载私钥;点击"Save public key"导出公钥,对比服务器~/.ssh/authorized_keys中的内容,确保完全一致(注意不要包含多余注释或换行)。
  2. 若格式存在问题,直接从PuTTYgen中重新导出.pem:加载.ppk后,点击"Conversions" -> "Export OpenSSH key",保存为新的.pem文件。

第二步:确保本地.pem的权限被工具识别

  • 在WSL或Git Bash环境中操作.pem文件,执行chmod 400 /path/to/new-abc.pem,然后在该环境下测试SSH连接:
    ssh -i /path/to/new-abc.pem ubuntu@<EC2-IP>
    
    (注意:根据EC2 AMI选择正确的用户名,Ubuntu用ubuntu,Amazon Linux用ec2-user,CentOS用centos)

第三步:修复EC2实例端的权限与配置

用能正常连接的.ppk登录实例,执行以下操作:

  1. 修复.ssh目录权限:
    chmod 700 ~/.ssh
    
  2. 修复authorized_keys权限:
    chmod 600 ~/.ssh/authorized_keys
    
  3. 检查sshd配置文件/etc/ssh/sshd_config:
    • 确保PubkeyAuthentication yes(取消注释)
    • 确保AuthorizedKeysFile .ssh/authorized_keys(默认配置,若被修改需改回)
  4. 重启sshd服务:
    sudo systemctl restart sshd
    

第四步:针对不同工具的配置调整

  • MobaXterm:新建SSH会话时,在"Advanced SSH settings"中选择修改好权限的.pem,建议将.pem放在WSL的用户目录下(如/home/your-user/abc.pem),而非Windows本地目录。
  • WinSCP:新建SFTP站点,在"高级"->"SSH"->"认证"中选择.pem文件;若仍报错,尝试用PuTTYgen重新导出的.pem,或直接使用.ppk(WinSCP原生支持.ppk)。

内容的提问来源于stack exchange,提问作者gonzalez.ivan90

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:56:20