【问题标题】:AWS EC2 unable to SSH with Key PairAWS EC2 无法使用密钥对进行 SSH
【发布时间】:2019-08-13 05:15:30
【问题描述】:

我在使用 SSH 进入我正在运行的 AWS EC2 实例时遇到了一些问题。根据说明,我需要创建一个密钥对,它会下载一个.pem 私钥文件,我将其命名为QARTH.pem。从保存此文件的目录中,我应该执行命令:

ssh -i "QARTH.pem" ubuntu@ec2-XX-XX-XX-XXX.us-west-2.compute.amazon.com

但是,我得到了错误:

Permission denied (publickey).

我正在使用自动生成的launch-wizard 安全组,它允许端口 22 对所有 IP 进行传入访问。

我还使用示例过程将 .pem 文件转换为 PuTTy 私钥 .ppk 文件,并使用了 PuTTy 客户端。我犯了同样的错误。

这似乎是一个非常简单的过程,所以我不知道我做错了什么。如果你有任何想法,我很想听听。不过,我的网络安全性不强,所以请以外行友好的方式回答。

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    您使用了错误的密钥对 (QARTH.pem)、错误的用户名、连接到错误的系统或 QARTH.pem 未设置为只读。

    第 1 步:向 ssh 添加调试选项以帮助确定问题所在:

    ssh -v -i QARTH.pem ubuntu@ec2-XX-XX-XX-XXX.us-west-2.compute.amazon.com
    

    第 2 步:确保密钥对文件是只读的。

    Linux: 要将密钥对文件设为只读,请执行以下命令:chmod 400 QARTH.pem,而与文件位于同一目录中。

    窗口: 在 Windows 系统上运行的命令(以管理员身份)以使密钥对成为只读并满足 ssh

    请注意将 %USERNAME% 替换为您的用户名。

    REM Disable inheritance on QARTH.pem
    icacls QARTH.pem /inheritance:d
    
    REM Delete "NT AUTHORITY\Authenticated Users" from having any rights
    icacls QARTH.pem /remove "NT AUTHORITY\Authenticated Users"
    
    REM Delete "BUILTIN\Users" from having any rights
    icacls QARTH.pem /remove "BUILTIN\Users"
    
    REM Grant Read-Only rights to me
    icacls QARTH.pem /GRANT:R "%USERNAME%:(R)"
    

    第 3 步:确保您为 EC2 AMI 使用正确的用户名:

    流行 EC2 AMI 的用户名:

    • 对于 Amazon Linux 2 或 Amazon Linux AMI,用户名为 ec2-user。
    • 对于 Centos AMI,用户名为 centos。
    • 对于 Debian AMI,用户名为 admin 或 root。
    • 对于 Fedora AMI,用户名为 ec2-user 或 fedora。
    • 对于 RHEL AMI,用户名为 ec2-user 或 root。
    • 对于 SUSE AMI,用户名为 ec2-user 或 root。
    • 对于 Ubuntu AMI,用户名为 ubuntu。
    • 否则,如果 ec2-user 和 root 不起作用,请与 AMI 提供商联系。

    【讨论】:

    • 您好,感谢您的回复。请您详细说明“错误的密钥对”是什么意思?我正在使用pem 文件,当您在 AWS 仪表板上生成密钥对时会自动下载该文件。另外,我应该使用一些 Windows 替代 chmod 吗? chmod 400 好像没有任何效果。
    • 您是在 Windows 下运行吗?哪个版本?哪个 ssh 客户端?当我说错误的密钥对时,我的意思是错误的密钥对。如果您有两个密钥对并使用了错误的一对,您将收到该错误消息。因此,您要么使用了错误的密钥对,要么密钥对上的文件权限错误(需要只读)。从 Windows 运行时,chmod 不足以使 Windows 文件成为只读文件。我将使用命令编辑我的答案,使密钥对在 Windows 上只读,但我需要先知道 Windows 的版本。
    • 酷,没问题。这是 Windows 7 旗舰版。根据您的说明,我很确定这是正确的文件,所以它一定是只读问题。我已经在 Windows 10 机器上成功完成了这项工作,但不是 Win7 机器。
    • 非常感谢您的详细说明。不幸的是,经过两次此过程后,输出没有任何变化。即使做了这一切,看起来mod仍然是644,并且错误输出是一样的。
    • 你是如何确定 644 权限的?这意味着其中一个命令失败。是否有任何命令报告错误?再检查一遍。我只是在上一个命令中更正了文件名。
    【解决方案2】:

    TL;DR 尝试通过 AWS 控制台使用手动生成的 SSH 密钥对

    好吧,同事们,我确实不知道为什么(还不知道),但是当我使用 CLI 命令生成密钥时,SSH 连接确实不起作用

    aws --region us-east-1 ec2 create-key-pair --key-name "KeyPair"
    

    但是,当我使用 AWS 控制台 手动创建 SSH 密钥 pai 时,它工作得非常好:

    1. Go to AWS Console
    2. EC2 :: Network & Security (in left menu) :: Key Pairs :: Create Key Pair
    3. <As soon as I am specifying the name of a key pair Amazon downloads the keys into a default download directory>
    4. chmod 400 KeyPair.pem
    5. ssh -i ./SSHKeys.pem ec2-user@ec2-54-162-166-40.compute-1.amazonaws.com
    6. ENJOY!
    

    P.S.我很确定我在 CLI 响应复制粘贴期间搞砸了一些东西¯\_(ツ)_/¯

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 2017-02-08
      • 2020-01-10
      • 1970-01-01
      • 2015-08-22
      • 2021-03-09
      • 2023-03-09
      • 2016-12-04
      • 2019-02-12
      相关资源
      最近更新 更多