【问题标题】: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 的回答)(也可以是 root,fedora,见下文)
  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,用户名是 fedora 或 ec2-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 detail 下Advanced 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
                                      相关资源
                                      最近更新 更多