AWS SSH连接错误:Permission denied (publickey)。

24

我正在尝试使用SSH连接到我的EC2实例,但是我感到非常疯狂。我已经阅读了这篇帖子并尝试了所有的用户组合:

AWS ssh访问“Permission denied (publickey)”问题

对我仍然没有用。有什么建议吗?

  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
@PlasmaPower 请看下面的评论。谢谢。 - Rober
我在这里制作了一个详细教程,如果有帮助的话。 - phanvugiap
9个回答

34

你可能使用了错误的用户登录。如果是Ubuntu实例,命令应该是:

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

3
在我的情况下,我们一直使用Ubuntu,所以我习惯于使用Ubuntu用户:ubuntu@host。当我测试Amazon Linux AMI时,出现了这个错误。对于Amazon Linux,你必须连接为ec2-user@host。 - Michael Rush
这就是我在寻找的答案。谢谢:) - Dilip Rajkumar

16
虽然不是针对AWS特定的问题,但在某些复杂情况下会出现以下并不实用的错误信息:debug1: key_parse_private2: missing begin marker,例如当远程机器上SSH用户的主目录所有权(或权限)不正确时。
排除此类和类似模糊信息的最佳方法是检查远程机器上的授权日志,只要您有权限访问,它通常会准确定位问题。在Debian和Ubuntu系统上,可以使用以下命令轻松完成此操作(适当时请使用sudo):tail -f -n 80 /var/log/auth.log
在我的特定案例中,我发现错误信息为:Authentication refused: bad ownership or modes for directory /var/www,非常准确且简明:Owner:Group应该设置为www-data:www-data,而不是daemon:daemon(这是在Ubuntu机器上安装了其他Web服务器的情况)。

非常感谢。.ssh目录的权限为775,这授予了组成员写入访问权限。由于此原因,连接被拒绝。将其更改为755就解决了问题。 - egelev
谢谢,查看远程机器上的auth.log解决了我的问题,原因是/home/backup/.ssh/authorized_keys文件中有错误选项(我在from="ip1,ip2"中没有引号("))。但实际上,在ssh -v中仍然显示debug1: key_parse_private2: missing begin marker,即使它可以正常工作。 - dentarg
1
@dentarg 感谢您分享这个有用的观察:即使它起作用,ssh -v输出中仍然显示debug1: key_parse_private2: missing begin marker。嗯...所以也许这个消息在我的情况下是一个“误导”。我想答案仍然很有用,我想编辑它以更好地反映您在这方面的观察精髓。我想知道这个消息的真正根本原因是什么。 - Ben Johnson
作为给其他人的提示,当我调试一个类似的 Vagrant CentOS 7 盒子时,我发现 auth.log 文件不存在,而是在 /var/log/secure 中。 - karlos

5

我曾遇到类似的问题,使用用户名 'ec2-user' 时出现了 "key_parse_private2: missing begin marker" 错误,但当我将用户更改为 ubuntu 时问题就得以解决。


4
尝试以下步骤:
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

1
请看我上面更新的评论,从您建议的执行结果来看,仍然没有改变 :( - Rober
好的,不要慌张...你尝试从EC2控制台直接连接了吗?进入你的实例...你必须使用Firefox...点击“连接”,然后选择“直接从我的浏览器中使用Java SSH客户端”...先在那里尝试一下...如果连接成功...这是一个好兆头...从那里断开连接...然后首先在你的终端上尝试ssh -i ........如果还是不行,那么尝试我的回答中的步骤...祝你好运! :) 如果你有任何问题或困难,请再问我! - Black Sheep
抱歉,我还在学习中,我的意思是我想通过ssh连接到一个实例。但我不是手动创建实例,而是使用弹性Beanstalk,我以为弹性Beanstalk会为您创建EC2实例。问题是该实例尚未关联密钥对(已经存在)。我正在尝试的方式是否可行,或者我应该手动创建EC2实例(没有EB)? - Rober
不用担心,我以前从未使用过 EBS :) 所以,你可以尝试这种方式 -> SSH to EBS?你必须了解关于 EBS 的事情:开发人员被迫接受供应商预先确定的所有决策 - 几乎没有机会重新控制其应用程序基础架构的各个部分。-- 你想要实现什么? - Black Sheep
嗨@aldanux,终于我按照你的指示成功建立了ssh连接。然而这样做的目的是为了访问日志,因为我一直在尝试部署我的第一个应用程序,但迄今为止没有成功。你能否请看一下我的新帖子:http://stackoverflow.com/questions/23425009/aws-elastic-beanstalk-rails-were-sorry-but-something-went-wrong-in-ubuntu 。非常感谢。我在你的个人资料中看到你在西班牙,如果可以的话,我想与你联系。 - Rober
显示剩余3条评论

1

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

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


0

是的,确实是一个非常误导人的信息。在我的情况下,我使用了错误的密钥。

我们需要删除密钥对并创建新的密钥对,但我们的实例仍然在使用旧的密钥对(因为你不能那么容易地做到这一点)。

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


0

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

例如,如果最后一行缺失,则会出现“缺少开始标记”。

确保.pem以以下内容结尾:

-----END RSA PRIVATE KEY-----


0

以“admin”身份登录对我有效。根据您的实例类型,登录用户会发生变化。ec2-user或ubuntu或在我的情况下是admin。 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


-3
许多问题可能导致连接问题: 请检查以下设置:
  1. AWS安全组设置,并检查ssh端口22策略
  2. 检查您在局域网连接中使用的防火墙设置
  3. 在本地计算机上生成ssh-keygen,以备将来使用添加到AWS Linux服务器。
  4. 重新生成面板中的新ssh密钥。
  5. 如果您在AWS Linux服务器上使用防火墙,请通过mxtoolbox检查您的ip黑名单。

请尽可能尝试以上所有方法以解决错误。如果有效请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接