【问题标题】:AWS SSH connection error: Permission denied (publickey)AWS SSH 连接错误:权限被拒绝(公钥)
【发布时间】:2014-06-17 01:11:39
【问题描述】:

我正在尝试使用 SSH 连接到我的 EC2 实例,我ḿ 变得疯狂。我已阅读这篇文章并尝试了所有用户组合:

AWS ssh access 'Permission denied (publickey)' issue

它仍然不适合我。知道我错过了什么吗?

  roberto@ubuntu:~/keys$ ssh -v -i ec2-key-pair.pem ec2-user@ec2-54-72-242-0.eu-west-1.compute.amazonaws.com
OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ec2-54-72-242-0.eu-west-1.compute.amazonaws.com [54.72.242.0] port 22.
debug1: Connection established.
debug1: identity file ec2-key-pair.pem type -1
debug1: identity file ec2-key-pair.pem-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6p1 Ubuntu-2ubuntu1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2
debug1: match: OpenSSH_6.2 pat OpenSSH* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA e4:06:ee:a5:a5:d2:97:5f:0f:b7:06:5e:f2:b3:da:26
debug1: Host 'ec2-54-72-242-0.eu-west-1.compute.amazonaws.com' is known and matches the ECDSA host key.
debug1: Found key in /home/roberto/.ssh/known_hosts:3
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: ec2-key-pair.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.
Permission denied (publickey).

UPDATE: 

根据@aldanux 的建议:

    roberto@ubuntu:~/keys$ ssh-keygen -R 54.72.242.0
# Host 54.72.242.0 found: line 4 type ECDSA
/home/roberto/.ssh/known_hosts updated.
Original contents retained as /home/roberto/.ssh/known_hosts.old
roberto@ubuntu:~/keys$ ssh -i ec2-key-pair.pem ec2-user@ec2-54-72-242-0.eu-west-1.compute.amazonaws.com
Warning: Permanently added the ECDSA host key for IP address '54.72.242.0' to the list of known hosts.
Permission denied (publickey).

【问题讨论】:

  • 看起来ec2-key-pair.pem 无效/损坏,"key_parse_private2: missing begin marker"
  • @PlasmaPower 请参阅下面的我的 cmets。谢谢。
  • 如果有帮助的话,我在这里发了一个detail tutorial

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


【解决方案1】:

许多问题都可能导致连接问题: 请检查以下设置:

  1. AWS 安全组设置并检查 ssh 端口 22 策略
  2. 检查您在局域网连接中使用的防火墙设置
  3. 在您的本地计算机上生成 ssh-keygen 并添加到 aws linux 服务器以确保未来安全。
  4. 在面板中重新生成新的 ssh 密钥。
  5. 如果您在 aws linux 服务器上使用防火墙,请检查 mxtoolbox 上的 ipblacklist。

如果可能,请首先尝试克服错误。让我知道它是否有效。

【讨论】:

    【解决方案2】:

    获取此错误的一种简单方法是损坏的 .pem 文件。

    例如,如果缺少 last 行,您会得到“缺少开始标记”。

    确保 .pem 以:

    结尾

    -----结束 RSA 私钥-----

    【讨论】:

      【解决方案3】:

      以“管理员”身份登录对我有用。根据您的实例类型,登录用户会发生变化。 ec2-user 或 ubuntu 或在我的情况下是管理员。 ssh -v -i ./my_key_file.pem admin@ec2-11-222-333-44.compute-1.amazonaws.com

      还要确保pem文件的权限是600 chmod 600 ./my_key_file.pem

      【讨论】:

        【解决方案4】:

        虽然不是特定于 AWS,但此无益的错误消息

        debug1: key_parse_private2: missing begin marker

        会在少数不明确的情况下发生,例如远程计算机上 SSH 用户主目录的所有权(或权限)不正确时。

        解决这个和类似的模糊消息的最佳方法是检查远程计算机上的授权日志,前提是您有权访问,因为它通常会查明问题。在 Debian 和 Ubuntu 系统上,使用 tail 最容易做到这一点(酌情使用 sudo):

        tail -f -n 80 /var/log/auth.log

        在我的特殊情况下,我发现

        Authentication refused: bad ownership or modes for directory /var/www

        非常准确和简洁:owner:group 设置为 daemon:daemon,而应该是 www-data:www-data(这是在过去一定安装了其他网络服务器的 Ubuntu 机器上)。

        【讨论】:

        • 非常感谢。 .ssh 目录的权限为 775,授予组成员写入权限。连接因此被拒绝。将其更改为 755 就可以了。
        • 谢谢,在远程机器上查看auth.log 解决了我的问题,即Bad options in /home/backup/.ssh/authorized_keys file ...(我在from="ip1,ip2" 中没有引号("))。但实际上debug1: key_parse_private2: missing begin marker 仍然显示在ssh -v 中,即使它有效。
        • @dentarg 感谢分享有用的观察结果:debug1: key_parse_private2: missing begin marker 仍然显示在 ssh -v 输出中,即使它有效。嗯......所以也许这条消息在我的情况下是一个“红鲱鱼”。我想答案仍然有用,我想对其进行编辑以更好地反映您在这方面观察的本质。我想知道这条消息的 true 根本原因是什么。
        • 作为其他人的说明,在使用 Vagrant CentOS 7 机器调试类似问题时,我发现 auth.log 不存在,而是在 /var/log/secure。
        【解决方案5】:

        要检查的另一件事是PermitRootLoginAllowUsers 中的/etc/ssh/sshd_config

        如果您的用户访问受到限制,即使在密钥授权成功后也会出现此debug1: key_parse_private2: missing begin marker

        【讨论】:

          【解决方案6】:

          是的,确实是相当具有误导性的信息。例如,我使用了错误的密钥。

          我们需要删除密钥对并创建新的,除了我们的实例一直使用旧的(因为你不能那么容易做到)。

          错误消息是相同的,因此值得在实例的 aws 面板中检查密钥名称是否与您在 key paris 中使用的密钥对匹配。

          【讨论】:

            【解决方案7】:

            我在使用用户名 'ec2-user' 时遇到了类似的问题,“key_parse_private2:缺少开始标记”,但是当我更改为 ubuntu 作为用户时,它得到了解决。

            【讨论】:

              【解决方案8】:

              您可能以错误的用户身份登录。如果它是 Ubuntu 实例,则命令为:

              ssh -v -i ec2-key-pair.pem ubuntu@ec2-54-72-242-0.eu-west-1.compute.amazonaws.com
              

              【讨论】:

              • 就我而言,我们一直在使用 Ubuntu,所以我习惯使用 ubuntu 用户:ubuntu@host。我在测试 Amazon Linux AMI 时收到此错误。对于 Amazon Linux,您必须以 ec2-user@host 身份连接
              • 这是我一直在寻找的答案.. Tnx :)
              【解决方案9】:

              试试这个步骤:

              ssh-keygen -R 54.72.242.0
              
              sudo chmod 600 ec2-key-pair.pem
              

              然后:

              ssh -i ec2-key-pair.pem ec2-user@ec2-54-72-242-0.eu-west-1.compute.amazonaws.com
              

              【讨论】:

              • 从您建议的执行中查看我上面的更新评论。还是一样的:(
              • Ok.. dont panic... Have you try to connect direct in the console from EC2? Go to your instance... you have to use firefox... click on connect` 然后选择A Java SSH Client directly from my browser.. 先在那里试一试...如果您已连接...这是一个好兆头...断开连接。 ..然后首先在您的终端上尝试ssh -i ........如果没有,请尝试我的回答中的步骤...祝您好运! :) 如果您有任何疑问或问题,请再次询问我!
              • @Aldamur 我非常感谢您的 cmets。我尝试连接,但是,我收到“实例未与密钥对关联”消息。我在密钥对部分有一个密钥对,但我不知道如何将它与实例关联。我读过一篇文章说密钥对不能与现有实例相关联,但是,我也尝试终止并创建一个新实例,但它仍然没有关联。我使用弹性豆茎来创建实例。我怎样才能做到这一点?我认为这是问题所在。
              • 在您的问题中您说的是 EC2 实例?那是你要的吗?所以,你必须去EC2并在那里启动实例......制作一个新的密钥对(预防措施)......下载你的密钥对......并启动......然后再试一次我的步骤......然后必须确定工作!
              • 对不起,我刚刚学习,我的意思是我想用ssh连接到一个实例。但我不是手动创建实例,而是使用弹性 Beanstalk,我认为 Elastic Beanstalk 会为您创建一个 EC2 实例。问题是实例没有关联密钥对(已经存在)。是否可以像我尝试做的那样做,或者我应该手动创建一个 EC2 实例(没有 EB)?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-24
              • 1970-01-01
              • 1970-01-01
              • 2015-06-26
              • 2017-11-09
              • 2018-01-28
              • 2020-02-11
              相关资源
              最近更新 更多