Amazon EC2权限被拒绝(公钥)


73

这似乎是一个常见问题,但我的具体情况似乎有些不同。

我使用命令行工具设置了一个新的Amazon EC2实例,并通过SSH连接并做了一些配置工作。

但是,起初,我无法进入该实例,必须停止并重新启动该实例,然后才能进行连接。重新启动之前,我刚刚得到响应。

Permission denied (publickey).

那是昨晚,今天早上我回到同一个实例,现在我得到的只是

Permission denied (publickey).

我尝试不高兴地重启实例。

有人可以在这里指出正确的方向吗?昨晚使用的同一命令不再起作用,我正在从Macbook Pro连接。

Answers:


76

我要回答我自己的问题,以防其他人看到同样的事情……昨晚我做了:

ssh-add ~/.ssh/[keypair name]

然后连接:

ssh ec2-user@[ec2 instance ip]

今天早上,我尝试了同样的操作,但无法连接。但是做

ssh -i ~/.ssh/[keypair name] ec2-user@[ec2 instance ip]

让我进去。

ssh-add再次在密钥对上使用使我进入。我猜测ssh-add仅在发布它的外壳中有效。当我关闭终端窗口并打开另一个窗口时,如果没有显式的话,我将不再拥有该密钥对。


8
谢谢男人,一直忘了使用“ ec2-user”部分,返回的错误消息对该错误的信息不是很丰富
pulkitsinghal 2012年

20
如果是ubuntu实例,请使用ssh -i〜/ .ssh / [keypair name] ubuntu @ [ec2 instance ip]
Gal Bracha 2014年

Elastic Map Reduce群集-> hadoop @ [ec2实例ip]
craastad 2014年

2
尝试更改用户名。如果您使用的是Ubuntu,则应使用“ ubuntu”作为用户名。
Foxinni

疯狂的事情是,我正在搜索“ ubuntu ami 14.04权限被拒绝的公钥aws”,需要该帐户的ubuntu是天赐的礼物,我没有在任何文档中读过此书,有人可以将我定向到它吗?
小丑人

28

这是因为我没有使用正确的用户名而发生的。使用我在遵循的教程中使用的AMI时,我能够登录,但是当我尝试使用其他AMI(Bitnami的ubuntu + LAMP)时,Permission denied (public key).出现错误。我终于意识到,如果我从更改用户名教程AMIubuntuec2-user我会得到相同的错误。

因此,一个快速的Google告诉我们,Bitnami AMI的用户名是bitnami。问题解决了。


重新安装实例,更改键值对等的数小时-原来是这个用户名!谢谢:)
Katya S

3
谢谢你的提示。就我而言,情况恰恰相反,我需要使用ubuntu作为用户名。
STW 2014年

不为我工作。使用Bitnami AMI,他们说bitnami是用户名,使用正确的.pem,在新的shell中启动,什么也没有。非常沮丧,这是没有进展的第二天。
约翰·史密斯

14

我遇到了类似的问题,原来是对主文件夹的权限。幸运的是,我仍然可以打开另一个现有的ssh连接,因此我能够检查ec2实例上的日志:

$ sudo less / var / log / secure

其中包含:

Dec  9 05:58:20 ... sshd[29816]: Authentication refused: 
    bad ownership or modes for directory /home/ec2-user

这是通过发出以下命令解决的:

$ chmod og-rwx / home / ec2-user

我希望这可以帮助其他人。


如果仍然没有打开连接,该怎么办?
Nate

5
回答了我自己的问题:将EBS卷附加到其他EC2,进入那里并更改权限,然后重新附加到您关心的实例
Nate

+1我们有一个相同的问题,这是亚马逊支持团队提供给我们的确切答复。主文件夹上的权限是罪魁祸首。
amit1310 2013年

是!!这正是问题所在,无需再次进行任何侦查,此帖子可助您一臂之力!
chrismarx 2014年

@Nate我尝试将EBS卷附加到另一个实例,但是现在我在该实例上遇到了同样的问题。很有道理,因为现在该实例具有错误的权限。您如何避免这种情况?
Wouter van Dijke

12

请注意,重新启动实例后,DNS名称已更改。我为此摔倒了好几次。密钥文件仍然有效,但是“服务器名”已更改。


1
感谢您的提示。那也是我的问题。
asmaier 2012年

3

谢谢!

我非常感谢@Trevor在这里的回答。我将添加这个小技巧,我现在使用它来避免将来出现此问题。

方便

因为您必须为每个可用性区域创建一个不同的密钥对,所以管理它们以及使用它们的命令变得很麻烦。在~/.ssh/config我的ssh命令中进行正确的设置非常简单:

ssh ec2-52-10-20-30.us-west-2.compute.amazonaws.com

这是美国西部2可用性区域中服务器的完整公共DNS。由于以下原因,选择了正确的用户名和密钥:

## ~/.ssh/config

Host *.us-west-2.compute.amazonaws.com
    User ec2-user
    IdentityFile ~/.ssh/bruno-bronosky-aws-us-west-2.pem

3

如果EC2实例使用Ubuntu ami 14.04。尝试在EC2实例IP之前添加“ ubuntu @”。

ssh -i [key name] ubuntu@[EC2 instance ip]

1

确保私钥的路径正确。

如果您的ssh客户端找不到您要提供的私钥,那么奇怪的是它不会给您错误!它只是不会使用该密钥。它将使用您在.ssh / id_dsa和.ssh / id_ecdsa下拥有的密钥,这当然会使公共密钥身份验证变得模糊。



0

我还收到:权限被拒绝。

我用了 :

ssh -v -i ~/.ssh/pemfile ec2-user@xx.xx.xx.xx

响应是:

debug1: No more authentication methods to try.

输入命令:

ssh-add -l

但是回应是空的

因此,我认为笔文件的格式有误。接下来,我找到了从ec2 web下载的笔文件,并将其移到了上面。在此之前,我创建了一个新文件,并将文本从下载的pem文件解析到目录“ .ssh”,然后:

ssh-add filename

哪个成功了。


这是答案/解决方案吗?从我读到的内容来看,您是否真正成功还不是很清楚。我将根据我的意思建议进行修改,但如果不准确,请回滚。
重力

0

我整天都在互联网上寻找答案。我的问题完全一样。我摆弄许可问题,来回更改,但没有一个解决我的问题。在用新密钥测试并启动/终止了几个实例之后,最终我发现它与不同区域中的相同密钥名称有关。

这就是“权限被拒绝(公钥)”发生在我身上的方式:
1.按照练习手册,选择us-east-1作为默认区域
。2.创建密钥名称“ mykey”
。3.通过以下示例探索AWS世界书。
4.有一天,尝试测试悉尼区域的速度,默认情况下切换到悉尼区域。
5.创建另一个密钥,不用考虑就将其命名为“ mykey”,但是在几天之内不使用它通过cli进行连接。
6.尝试使用cli连接到AWS。
7.得到“权限被拒绝(公钥)”。
8.花了很多时间来调试ssh问题,直到我注意到密钥/区域问题。

希望这可以帮助像我这样的新手。

为避免此问题,我认为命名密钥的最佳做法是在其中附加区域。


这不能为问题提供答案。一旦您拥有足够的声誉,您就可以在任何帖子中发表评论;相反,请提供不需要问询者澄清的答案。-来自评论
HimBromBeere 16-10-25

我将默认区域设置为us-east-1,并创建了一个名为“ mykey”的密钥。后来,我更改为悉尼区域,并创建了另一个名为“ mykey”的密钥。然后当我
FrankCJ

这工作谢谢!我得到的密钥是我登录到其他区域时使用的密钥。
Sridhar Thiagarajan

0

我将权限更改为600,尽管对pem文件的权限已经为644。:p希望它能有所帮助


0

遇到相同的问题,这是您应该做的。首先,如果您使用Windows,请使用Babun命令行,就像Linux一样。拥有该命令行后,将其打开,然后键入ssh-i [key pair path] [username]@[EC2 public IP]. 要查找密钥对的路径,请转到存储密钥的文件,按住shift键并单击鼠标右键,然后单击“复制路径”,然后将其粘贴到该路径所处的位置。上面的命令。您粘贴的路径的外部可能会出现“”标记,并带有\反斜杠。删除“”标记,并将\反斜杠替换为常规斜杠/。在我遇到的这种情况下,这对您来说很幸运。


0

至少第一次从cli连接到EC2有点棘手。如果您去`

服务->计算-> EC2->运行实例>并选择要ssh的实例->连接

`然后您将看到描述如何连接的对话框。部分内容如下所示。

在此处输入图片说明

如果您使用数字4而没有在前面加上数字ec2-user@,则会得到

Permission denied (publickey).

只需将下面提到的内容复制并粘贴到“示例:”中即可。


0

就我而言,原因是我已使用chmod更改了根目录文件夹的权限。在AWS网站上,他们描述了用另一种临时实例将权限改回很长的方法。但是,我只是终止了旧实例并启动了另一个实例,这次没有对根目录的权限进行任何更改,一切正常。


0

我有同样的问题。对我来说解决的是在目录和PEM文件周围加引号。过去我从来没有这样做。我不确定为什么这次我被迫这样做。我的PEM文件位于其他项目的同一目录中。


0

在处理ssh时,这是一个常见问题。

在基于Mac或Linux的系统上安装一个时,可以遵循以下路径:

  1. 转到Pem文件的位置
  2. 在那打开终端
  3. 运行以下命令: chmod 400
  4. 然后使用命令将服务器与ssh连接,它将正常工作。

但是Windows系统存在问题,因为chmodcmd或Powershell中不是命令。

要在Windows上使用ssh,我们必须遵循以下过程:(注:此过程仅在PowerShell上有效,而在CMD中不起作用。我建议在Administrator模型中使用PowerShell。

步骤如下:

  1. 在管理员模式下打开Powershell。
  2. 进入存放pem文件的文件夹。
  3. RUN依次执行以下命令:
  • 这里的Pem文件的名称是key.pem

    1. icacls.exe key.pem /reset //撤销所有特权

    2. icacls.exe key.pem /grant:r "$($env:username):(r)" //授予所有以前的特权

    3. icacls.exe key.pem /inheritance:r //删除所有继承

希望这可以节省您的一天。

这是从以下链接获得的参考:WINDOWS中的CHMOD 400

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.