在Mac OSx上通过SSH连接EC2时出现权限错误

30

我对EC2很陌生。 我从这个网站创建了我的安全凭据:

http://paulstamatiou.com/how-to-getting-started-with-amazon-ec2

它运行得非常好,我重新启动后尝试连接时,会出现一个登录/密码提示框(我从未设置过)。 尝试多次后,我收到以下错误消息:

Permission denied (publickey,gssapi-with-mic)。

我做错了什么?

16个回答

68

我能想到两种可能性,尽管它们都在你引用的链接中提到了:

  1. 在你用于登录服务器的ssh命令中,你未指定正确的SSH密钥对文件或用户名:

    ssh -i [密钥对文件的完整路径] root@[EC2实例主机名或IP地址]

  2. 你没有正确的密钥对文件权限;你应该使用

    chmod 600 [密钥对文件]

确保只有你可以读取或写入文件。尝试使用ssh的-v选项获取更多有关它失败的信息,如果需要更多帮助,请在此处回复。

[更新]: 好的,如果一切设置正确,你应该看到以下内容:

debug1: Authentications that can continue: publickey,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Trying private key: ec2-keypair
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

你是在包含 ec2-keypair 文件的目录下运行 ssh 命令吗?如果是,请尝试指定 -i ./ec2-keypair 来排除路径问题。同时,检查 "ls -l [ec2-keypair 的完整路径]" 文件并确保权限为 600(显示为 rw-------)。如果这些都不起作用,我会怀疑密钥对文件的内容,因此请尝试使用链接中的步骤重新创建它。


以下是有关错误的具体信息:debug1:可以继续进行的身份验证:publickey,gssapi-with-mic debug1:下一个身份验证方法:publickey debug1:尝试私钥:ec2-keypair debug1:读取PEM私钥完成:类型RSA debug1:可以继续进行的身份验证:publickey,gssapi-with-mic debug1:没有更多的身份验证方法可尝试。 权限被拒绝(publickey,gssapi-with-mic)。 - Josh Scott
我编辑了我的答案,添加了更多信息,因为没有足够的空间放在新评论中。 - gareth_bowles
我已经检查过了。我有两个密钥对,一个用于一个站点,另一个用于另一个站点。我可以在另一个实例上使用同样会导致问题的密钥对而没有问题。这个问题可能是与特定实例有关吗?谢谢你的帮助。 - Josh Scott
抱歉,我现在卡住了,特别是你刚才提到可以无问题连接到其他实例。建议您通过AWS管理控制台(https://console.aws.amazon.com)检查您的实例 - 您可以双重检查密钥对,并查看系统日志以确保实例成功启动。 - gareth_bowles
chmod 400 怎么样? - Timeless

17

我成功连接的关键是使用"ec2-user"用户而不是root用户。例如:

ssh -i [full path to keypair file] ec2-user@[EC2 instance hostname or IP address]

1
+1 我遇到了同样的问题,直到我按建议将用户从ec2user切换到ec2-user后才解决了。 - Eric Warriner
4
根据所使用的AMI / Linux发行版,ssh命令行的正确用户名可能是root、ubuntu、ec2-user或其他。 - Chris Johnson

6

在我的情况下,这是因为我的主目录权限是775,而SSH对此不满意。执行以下命令后应该可以正常工作:

server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys

今天下午我有非常类似的经历。我正在EC2上设置Django,突然无法再通过SSH登录到该实例。幸好我还有一个活动的连接,于是我修改了/etc/ssh/sshd_config文件来设置:

PasswordAuthentication yes

并设置ec2-user的密码,然后我就可以输入密码登录。

然而,在搜索了一些资料之后,我找到了这个帖子:http://ubuntuforums.org/showthread.php?t=577279。结果发现,在我的django安装过程中,我更改了我的主目录的权限,而SSH对此非常严格。因此,文件权限必须正确设置。


原来在我设置 Django 时,我改变了我的主目录权限,而 SSH 对此非常严格。我遇到了同样的问题,看到这个提示后,我试着去尝试一下,结果事情就解决了!为什么主目录除了 .ssh/ 目录外还需要设置为 700,这超出了我的理解范围。这并不会使它更加安全。 - aqn

6

+1

我发现对于一些AMI(Amazon Machine Image)例如Amazon Linux,使用ec2-user@xxx.XX.XX.XXX即可登录。但是对于Ubuntu镜像,必须使用ubuntu@来代替。这并不是.pem文件的问题,而是用户名的问题。


我曾经遇到过同样的问题,后来通过使用正确的默认用户名解决了。我的EC2实例是红帽Linux,用户名是cloud-user。所以ssh -i /path/to/key.pem cloud-user@<instance_ip_address>可以正常工作。 - Stuart

6

我也遇到了这个问题。我发现是因为我在主机名前忘记添加用户名:

ssh -i test.pem ec2-32-122-42-91.us-west-2.compute.amazonaws.com

然后我加入了用户名:

ssh -i test.pem ec2-user@ec2-32-122-42-91.us-west-2.compute.amazonaws.com

它能正常工作!


4

跟随mecca831的回答:

ssh -v -i generated-key.pem ec2-user@11.11.11.11

[ec2-user@ip-11.11.11.11 ~]$ sudo passwd ec2-user newpassword newpassword

[ec2-user@ip-11.11.11.11 ~]$ sudo vi /etc/ssh/sshd_config 按照以下方式修改文件:

    # To disable tunneled clear text passwords, change to no here!
    PasswordAuthentication yes
    #PermitEmptyPasswords no
    # EC2 uses keys for remote access
    #PasswordAuthentication no

保存

[ec2-user@ip-11.11.11.11 ~]$ sudo service sshd stop [ec2-user@ip-11.11.11.11 ~]$ sudo service sshd start

你应该能够按照以下方式退出并通过ssh登录:

ssh ec2-user@11.11.11.11

无需密钥,仅需密码即可进行提示。


3

你确定你使用的是正确的实例吗?我遇到过这个问题,发现我尝试的四个Ubuntu实例中有一些没有安装SSH服务器。

关于好的服务器列表,请参见“获取镜像”,大约在中间位置。听起来你可能在使用其他东西...这些镜像的默认用户名是ubuntu。

https://help.ubuntu.com/community/EC2StartersGuide


用户名为"ubuntu"的用户解决了我的问题。 - samuelsaumanchan

2

经过大约半个小时的搜索和尝试调试,我终于找到了解决方法。我的情况涉及到在两个不同的ec2实例上使用相同的pem文件,其中一个可以正常工作,而另一个则不能。

我第一次成功运行的实例是标准的aws linux ami amzn-ami-hvm-2014.03.2.x86_64-ebs。我只需使用以下命令:

ssh -i mypemfile.pem ec2-user@myec2ipaddress 

然后它就有效了。

我启动了一个 Fedora-x86_64-19-20140407-sda 实例,尝试相同的命令,但一直收到以下提示:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

将我的用户名从 ec2-user 改为 fedora 后,它就可以工作了!

ssh -i mypemfile.pem fedora@myec2address

2
我成功使用ec2-user登录了。
ssh -i [密钥文件的完整路径] ec2-user@[EC2实例主机名或IP地址]

1

以上方法都没有帮助到我,但是调整用户似乎有希望。对于我的配置,使用“ubuntu”是正确的......

ssh -i [密钥文件的完整路径] ubuntu@[EC2实例的主机名或IP地址]


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