【问题标题】:Permission denied (publickey) when SSH Access to Amazon EC2 instance [closed]SSH 访问 Amazon EC2 实例时权限被拒绝(公钥)[关闭]
【发布时间】:2013-09-04 06:49:03
【问题描述】:

我想使用我的 Amazon ec2 实例,但遇到以下错误:

Permission denied (publickey).

我已经创建了我的密钥对并下载了 .pem 文件。

给定:

chmod  600 pem file.

那么,这个命令

ssh -i /home/kashif/serverkey.pem  ubuntu@ec2-54-227-242-179.compute-1.amazonaws.com

但是有这个错误:

Permission denied (publickey)

另外,如何连接 filezilla 来上传/下载文件?

【问题讨论】:

  • 关于您的第二个问题,与 filezilla 连接以上传/下载文件,查看此分步说明 - y2u.be/e9BDvg42-JI
  • 你确定你没有使用“sudo chmod 600 pem file”这会导致这个错误并且意味着你需要在ssh之前使用sudo
  • 另外,对于某些 Debian 操作系统,用户名是 admin。至少对于 6.5 和 7.0 版本。
  • 如果您的用户名是ec2-user,请确保您没有使用ec2_user :)
  • 确保您尝试连接的用户拥有他/她$HOME/.ssh/authorized_keys文件中列出的密钥。

标签: amazon-web-services ssh amazon-ec2


【解决方案1】:

此错误消息表示您未能通过身份验证。

这些是可能导致这种情况的常见原因:

  1. 尝试使用错误的键进行连接。您确定此实例正在使用此密钥对吗?
  2. 尝试使用错误的用户名进行连接。 ubuntu 是基于 ubuntu 的 AWS 发行版的用户名,但在其他一些用户名上是 ec2-user(或在某些 Debian 上 admin,根据 Bogdan Kulbida 的回答)(也可以是 rootfedora,见下文)
  3. 尝试连接错误的主机。您尝试登录的主机是否正确?

请注意,如果您弄乱了 EC2 实例上的 /home/<username>/.ssh/authorized_keys 文件,1. 也会发生。

关于2.,AMI 映像描述中通常缺少关于您应该使用哪个用户名的信息。但是您可以在 AWS EC2 文档中找到一些内容,要点 4.http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

使用 ssh 命令连接到实例。您将指定私钥 (.pem) 文件和 user_name@public_dns_name。对于 Amazon Linux,用户名为 ec2-user。对于 RHEL5,用户名是 root 或 ec2-user。对于 Ubuntu,用户名为 ubuntu。对于 Fedora,用户名是 fedoraec2-user。对于 SUSE Linux,用户名为 root。否则,如果 ec2-user 和 root 不起作用,请咨询您的 AMI 提供商。

最后,请注意身份验证失败的原因还有很多。如果您想将 -v 选项添加到您的 SSH 命令并阅读输出,SSH 通常会非常明确地说明出了什么问题,正如该问题的许多其他答案中所解释的那样。

【讨论】:

  • 我不认为该界面允许您向正在运行的实例添加密钥,因此如果您丢失了正在运行的实例的密钥,则必须启动一个新的。
  • #2 解决了我的问题,谢谢!
  • 这个答案为我解决了。此实例的默认用户名是“ubuntu”,而不是 AWS 手册中所说的 ec2-user。尝试使用 'ec2-user@_your_EC2_IP.amazonaws.com
  • 关于 #1,错误的密钥,在 ssh 命令行中添加 -v(详细)向我显示它正在尝试哪些密钥,这让我意识到它没有尝试我生成的密钥,因为我将它命名为 id_rsa 或 id_dsa 以外的名称。
  • “ubuntu 是基于 ubuntu 的 AWS 发行版的用户名”,这就是我的灵感来源。用于 ec2-user,只是假设始终是用户名。
【解决方案2】:

我把sudo放在前面就解决了

sudo ssh -i mykey.pem myec2.amazonaws.com

但正确的解决方案是先更改所有权,然后按照 Janus Troelsen 下面所说的以普通用户身份连接。在我的情况下是:

chown wellington:wellington key.pem

【讨论】:

  • 为我工作(虽然必须更新一些包)!
  • 正确的解决方案是先更改所有权,然后以普通用户身份连接。使用sudo chown wellington:wellington key.pem
  • 它正在工作,在你的情况下,因为你试图在亚马逊上登录支持 root 用户的虚拟机
  • 我完成了 whoami 然后 sudo chown user_name_given_by_whoami xxxx.pem
【解决方案3】:

在这种情况下,问题来自丢失的密钥对。关于这个:

  • 无法更改实例上的密钥对。您必须创建一个使用新密钥对的新实例。
  • 如果您的实例被 Elastic Beanstalk 上的应用程序使用,您可以解决该问题

您可以按照以下步骤操作:

  1. 访问 AWS 管理控制台
  2. 打开 Elastic Beanstalk 选项卡
  3. 所有应用程序选项卡中选择您的应用程序
  4. 从左侧菜单中选择配置
  5. 点击Instances齿轮
  6. Server 表单中检查 EC2 Key Pair 输入并选择您的新密钥对。您可能需要刷新列表才能看到您刚刚创建的新密钥对。
  7. 保存
  8. Elastic Beanstalk 将为您创建与新密钥对关联的新实例。

一般来说,请记住您必须允许您的 EC2 实例接受入站 SSH 流量。

为此,您必须为 EC2 实例的安全组创建特定规则。 您可以按照以下步骤操作。

  1. 访问 AWS 管理控制台
  2. 打开 EC2 选项卡
  3. Instances 列表中选择您感兴趣的实例
  4. 描述选项卡中检查您的实例正在使用的安全组的名称。
  5. 再次在 Description Tab 中单击 View rules 并检查您的安全组是否有针对端口 22 的入站 ssh 流量的规则
  6. 如果不是,请在 Network & Security 菜单中选择 Security Group
  7. 选择您的实例使用的安全组,然后点击Inbound Tab
  8. 在 Inbound 选项卡的左侧,您可以为 SSH 入站流量编写规则:
    • 创建新规则:SSH
    • 来源IP 地址子网,您希望从中访问实例
    • 注意:如果您想为您的实例授予无限访问权限,您可以指定0.0.0.0/0,尽管亚马逊不推荐这种做法
  9. 点击添加规则,然后应用您的更改
  10. 检查您现在是否能够通过 SSH 连接到您的实例。

希望这可以帮助那些帮助过我的人。

【讨论】:

  • 你答案的第二部分是错误的。您无法获得“权限被拒绝(公钥)”。如果您没有正确设置防火墙设置(安全组)。 “权限被拒绝(公钥)。”是来自 SSH 的错误消息,并且是您的安全组配置正确的证明。相反,你会得到“ssh:连接到主机 x.x.x.x 端口 22:连接被拒绝”
  • 长话短说:错误消息表明此问题与您的安全组配置无关。
  • 你是对的。第二部分处理另一种问题。我修复了帖子。
  • 如果您丢失了密钥,我认为解决该问题的一种可能方法是拍摄实例的快照,然后使用新密钥启动一个新实例。在这种情况下,亚马逊会在 .ssh/authorized_keys 中附加新的公钥,因此请确保之后删除旧的公钥。 (注意不要删除新的,否则你会回到第一个问题)
【解决方案4】:

这就是我解决问题的方法

ssh -i <key> ec2-user@<ec2 ip>

【讨论】:

  • 对我来说,这里的关键似乎是主机的 DNS 地址与 IP。 ec2-user@ 为我工作。
  • 解决方案也是如此。
【解决方案5】:

这在我身上发生过多次。我使用了免费套餐上的 Amazon Linux AMI 2013.09.2 和 Ubuntu Server 12.04.3 LTS。

每次我启动一个实例时,都会出现权限被拒绝的情况。我还没有验证这一点,但我的理论是,在我尝试 ssh 进入服务器之前,服务器还没有完全设置好。经过几次尝试但被拒绝后,我等了几分钟,然后我就可以连接了。如果您遇到此问题,我建议您等待五分钟,然后重试。

【讨论】:

    【解决方案6】:

    对于 ubuntu 12.04 lts 微型实例,我必须将用户名设置为选项

    ssh -i pemfile.pem -l ubuntu dns
    

    【讨论】:

    • 这对我有用,我很惊讶它不是实际讨论可能需要的用户的 aws 文档的一部分。
    【解决方案7】:

    以下是产生此错误的可能令人沮丧的情况:

    如果您从另一个实例(例如 xyz 实例)创建的 AMI 启动新实例,则新实例将只接受实例 A 使用的相同密钥。这是完全可以理解的,但它会让人感到困惑,因为在逐步创建新实例的过程中,系统会要求您选择或创建一个不起作用的密钥(在最后一步)。

    无论您创建或选择什么密钥,只有您使用的密钥(例如 XYZ)才会被新实例接受。

    【讨论】:

    • 它通常将新的公钥附加到 authorized_keys 文件中,从而使两者都可用。虽然我已经有一段时间没有进行测试了,但这是我所期望的。
    【解决方案8】:

    尝试使用

    sudo ssh -i mykey.pem ubuntu@<ec2_ip_public_dns>
    

    sudo ssh -i mykey.pem ec2-user@<ec2_ip_public_dns>
    

    【讨论】:

      【解决方案9】:

      这个问题可以通过使用以下命令登录 Ubuntu 框来解决:

      ssh -i ec2key.pem ubuntu@ec2-public-IP
      

      【讨论】:

      • 请提供一些细节。
      【解决方案10】:

      我也为此苦苦挣扎了一段时间,直到找到以下内容:

      eb ssh
      

      当你从项目目录中使用它时,宾果-班戈不用大惊小怪,你就在

      【讨论】:

        【解决方案11】:

        显然由于

        ,我遇到了同样的权限被拒绝错误
        key_parse_private2: missing begin marker 
        

        在我的情况下,原因是当前用户的 ssh 配置文件 (~/.ssh/config)。

        使用以下内容:

        ssh -i ~/myKey.pem ec2-user@<IP address> -v 'exit'
        

        初始输出显示:

        debug1: Reading configuration data /home/ec2-user/.ssh/config
        debug1: Reading configuration data /etc/ssh/ssh_config
        debug1: /etc/ssh/ssh_config line 56: Applying options for *
        debug1: Hostname has changed; re-reading configuration
        debug1: Reading configuration data /home/ec2-user/.ssh/config
        debug1: Reading configuration data /etc/ssh/ssh_config
        

        ...这里剪掉了很多调试行...

        debug1: Next authentication method: publickey
        debug1: Trying private key: /home/ec2-user/somekey.pem
        debug1: key_parse_private2: missing begin marker
        debug1: read PEM private key done: type RSA
        debug1: Authentications that can continue: publickey
        debug1: No more authentication methods to try.
        

        上面的第三行是发现问题的地方;但是,我从底部(上图)四行查找调试消息并被误导。密钥没有问题,但我对其进行了测试并比较了其他配置。

        我的用户 ssh 配置文件通过意外的全局设置重置主机,如下所示。 Host 的第一行不应该是评论。

        $ cat config
        StrictHostKeyChecking=no
        #Host myAlias
                user ec2-user
                Hostname bitbucket.org
        #        IdentityFile ~/.ssh/somekey
        #        IdentitiesOnly yes
        
        Host my2ndAlias
                user myOtherUser
                Hostname bitbucket.org
                IdentityFile ~/.ssh/my2ndKey
                IdentitiesOnly yes
        

        我希望其他人会觉得这很有帮助。

        【讨论】:

          【解决方案12】:

          此错误的另一个可能原因:

          当用户的主目录是组可写时,用户无法登录。

          (在 Ubuntu 实例上重现。)

          【讨论】:

          • +1 真希望我在 4 小时前读过这篇文章!!!解决了 rsync -a 覆盖我的 ec2-user 文件夹权限的问题。
          • mv 我的主目录后,我无法登录。
          • 那么你如何登录一台受到影响的机器,而你根本无法登录呢?
          • 修复 /home 目录的权限也对我有用,谢谢! @AlexPetralia,您的链接已损坏 =/ 但在 aws 论坛中有一篇帖子谈论此问题:forums.aws.amazon.com/message.jspa?messageID=334402
          • 像 Alex Petralia 或 @Michael Hobbs 这样的人可以转发(或重述)解决方案吗?
          【解决方案13】:

          在我自己的情况下,我做了以下事情:

          chmod 400 <key.pem>
          
          ssh -i <key.pem> ec2-user@ec2_public_dns (for debian)
          

          我最初使用root@ 部分,我得到了这个提示:

          Please login as the user "ec2-user" rather than the user "root".
          

          【讨论】:

            【解决方案14】:

            我有两次正确的密钥和 ssh 命令行(我知道是因为我正在复制一个正常工作的 Ubuntu 14.04 实例),但是即使按照 Wade 的建议等待 5 分钟,也无法通过 ssh 进入新实例上面的安德森。

            我不得不销毁并重新创建机器。这发生在两个不同的场合。由于我一开始无法进入,所以我看不出有什么问题。

            所以,如果你有这个问题,试试吧。

            【讨论】:

              【解决方案15】:

              我在连接我的 Ubuntu 实例时忘记添加用户名 (ubuntu)。所以我尝试了这个:

              ssh -i /path/my-key-pair.pem my-ec2-instance.amazonaws.com
              

              正确的方法是

              ssh -i /path/my-key-pair.pem ubuntu@my-ec2-instance.amazonaws.com
              

              【讨论】:

              • 合法的初学者错误。如果您忘记添加用户名,那么它将使用您在本地计算机上登录的用户的用户名。
              【解决方案16】:

              我在 Windows 中使用 WinSCP。它在文件资源管理器和 PuTTY SSH Shell 上都能很好地访问我的 Amazon EC2-VPC Linux。与 chmod pem file 无关,因为它使用 pem 文件中的 myfile.ppk converted by PuTTYgen

              【讨论】:

                【解决方案17】:

                您必须检查以下几点:

                1. 确保您的 IP 地址正确
                2. 确保您使用的是正确的密钥
                3. 确保您使用的是正确的用户名,您可以尝试: 3.1。行政 3.2. ec2-用户 3.3. ubuntu

                我遇到了同样的问题,我把用户名改成ubuntu后就解决了。在 AWS 文档中提到了用户 ec2-user,但不知何故对我不起作用。

                【讨论】:

                  【解决方案18】:

                  我的私钥被设置为权限 400 并导致 Permission denied 将其设置为 '644' 帮助了我。

                  key_load_private_type: Permission denied 是我遇到的具体错误

                  解决方案: Sudo chmod 644 &lt;key.pem&gt;

                  注意:必须设置为 644,它不适用于 400

                  【讨论】:

                    【解决方案19】:

                    您需要执行以下步骤:

                    1. 如果您使用的是 Linux,请打开您的 ssh 客户端或终端。
                    2. 找到您的私钥文件并更改您的目录。
                      cd &lt;path to your .pem file&gt;
                    3. 执行以下命令:
                      chmod 400 &lt;filename&gt;.pem
                      ssh -i &lt;filename&gt;.pem ubuntu@&lt;ipaddress.com&gt;

                    如果ubuntu 用户不工作,请尝试使用ec2-user

                    【讨论】:

                      【解决方案20】:

                      当你尝试做时

                      ssh -i <.pem path> root@ec2-public-dns

                      您会收到一条消息,建议您使用ec2-user

                      Please login as the user "ec2-user" rather than the user "root".

                      所以用

                      ssh -i <.pem path> ec2-user@ec2-public-dns

                      【讨论】:

                        【解决方案21】:

                        我遇到了同样的问题,而且很奇怪。如果您认为自己做得很好,请遵循以下步骤: 有时对于 EC2 实例的用户存在混淆!!有时你会得到 ec2-user、ubuntu、centos 等。所以检查你的用户名是否有机器!

                        以root用户登录 ssh -i yourkey.pem (400 permission) root@<ip> 它会抛出错误并为您提供可用的用户名。然后使用该用户登录。

                        【讨论】:

                          【解决方案22】:

                          这是一件基本的事情,但请务必确认您尝试登录的用户。我的情况只是分散了注意力。我正在尝试使用 root 用户:

                          ssh -i ~/keys/<key_name> root@111.111.111.111
                          

                          但是是另一个用户

                          ssh -i ~/keys/<key_name> dedeco@111.111.111.111
                          

                          【讨论】:

                            【解决方案23】:

                            我有同样的错误,但不同的情况。对我来说,经过很长时间我可以成功地 ssh 到我的远程计算机后,它突然发生了。经过大量搜索我的问题的解决方案是文件权限。这当然很奇怪,因为我没有更改我的计算机或属于 ssh 文件/目录的远程计算机的任何权限。所以从好的archlinux wiki这里是:

                            对于本地机器执行以下操作:

                            $ chmod 700 ~/
                            $ chmod 700 ~/.ssh
                            $ chmod 600 ~/.ssh/id_ecdsa
                            

                            对于远程机器执行此操作:

                            $ chmod 700 ~/
                            $ chmod 700 ~/.ssh
                            $ chmod 600 ~/.ssh/authorized_keys
                            

                            在那之后,我的 ssh 在没有权限被拒绝(公钥)的情况下再次开始工作。

                            【讨论】:

                              【解决方案24】:

                              我能够从一台机器上进行 SSH,但不能从另一台机器上进行 SSH。原来我使用了错误的私钥。

                              我发现这个问题的方法是从我的私钥中获取公钥,如下所示:

                              ssh-keygen -y -f ./myprivatekey.pem

                              结果与 EC2 实例上 ~/.ssh/authorized_keys 中的内容不匹配。

                              【讨论】:

                                【解决方案25】:

                                同样的事情发生在我身上,但所发生的只是私钥从我本地机器上的钥匙串中丢失了。

                                ssh-add -K

                                重新添加密钥,然后连接的 ssh 命令恢复工作。

                                【讨论】:

                                • 重启后每次都会发生,我需要重新运行上面的命令来解决这个问题。
                                • 本人尚未对此进行验证,但此处经过验证的答案可能会有所帮助:apple.stackexchange.com/questions/254468/…
                                【解决方案26】:

                                另一个可能的问题:登录 ID 错误

                                查看“使用说明”

                                以上所有好的建议,但我遇到的是我选择了一个预制实例。实例启动后,查看使用说明。在我应该使用“bitnami”的说明中,我错误地使用了私钥的登录 ID(例如 bitnami@domain -i key.pem)

                                【讨论】:

                                  【解决方案27】:

                                  以上所有排名靠前的答案都是准确的,应该适用于大多数情况。如果他们不像我的情况那样,我只是摆脱了我试图通过 ssh 连接的机器上的 ~/.ssh/known_hosts 文件,这为我解决了问题。之后我就可以连接了。

                                  【讨论】:

                                  • 虽然删除known_hosts 可以解决连接到已更改其主机密钥的服务器时出现的问题(尽管无论如何这是一种不好的方法),但我很确定它无法解决 "Permission denied (publickey)" 错误。
                                  【解决方案28】:

                                  我有类似的错误

                                  debug1: Authentications that can continue: publickey
                                  debug1: Next authentication method: publickey
                                  debug1: Trying private key: xxxx.pem
                                  debug1: Authentications that can continue: publickey
                                  debug1: No more authentication methods to try.
                                  Permission denied (publickey).
                                  

                                  我的问题是,由于Step 3: Configure instance detailAdvanced details: 下的run-on-start-up 脚本出错,实例无法正常启动

                                  我以为我输入了什么:

                                  #include
 https://xxxx/bootstrap.sh


                                  实际输入的内容会破坏实例设置

                                  #include

                                  https://xxxx/bootstrap.sh

                                  所以没有创建实例端的公钥

                                  【讨论】:

                                    【解决方案29】:

                                    区分大小写。

                                    错误:SSH EC2-user@XXX.XX.XX.XX -i MyEC2KeyPair.pem

                                    正确:SSH ec2-user@XXX.XX.XX.XX -i MyEC2KeyPair.pem

                                    【讨论】:

                                      猜你喜欢
                                      • 2016-02-17
                                      • 2016-09-19
                                      • 2013-05-30
                                      • 2016-08-04
                                      • 2014-01-28
                                      • 1970-01-01
                                      • 2010-11-30
                                      • 2015-07-15
                                      • 2013-08-23
                                      相关资源
                                      最近更新 更多