Amazon EC2权限被拒绝(公钥)

这似乎是一个普遍的问题,但我的具体情况似乎有点不同。

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

但是,最初,我不能ssh到实例,我不得不停止并重新启动实例,然后我可以连接。 重新启动之前,我刚刚得到了答复。

Permission denied (publickey). 

那是昨天晚上,今天早上我回到同样的例子,现在我所得到的是

 Permission denied (publickey). 

我已经尝试重新启动实例,没有喜悦。

任何人都可以在这里指出正确的方向吗? 昨晚工作的命令不再有效,我从我的Macbook Pro连接。

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

 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只能在我发布的shell中工作。当我closuresterminal窗口并打开另一个时,我不再有那个密钥对明确。

这发生在我身上,因为我没有使用正确的用户名。 我在使用教程中使用的AMI时能够login,但是当我尝试使用不同的AMI(Bitnami的ubuntu + LAMP)时,我会得到Permission denied (public key). 错误。 我终于意识到,如果我将教程ami的用户名从ubuntu更改为ec2-user我会得到同样的错误。

所以快速谷歌告诉Bitnami AMIs的用户名是bitnami 。 问题解决了。

我遇到了类似的问题,结果是在主文件夹的权限。 幸运的是我还有另一个现有的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

我希望这可以帮助别人。

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

谢谢!

我非常欣赏@特雷弗的答案在这里。 我现在要添加这个小技巧来避免将来出现这个问题。

方便

因为必须为每个可用区域创build不同的密钥对,pipe理它们以及使用它们的命令变得相当麻烦。 在~/.ssh/config正确的设置我的ssh命令就像下面这样简单:

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

这是美国西部2区可用服务器的完整公共DNS。 正确的用户名和密钥是因为这个select的:

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

确保私钥的path是正确的。

如果你的SSH客户端找不到你要提供的私钥,奇怪的是它不会给你一个错误! 它只是不会使用这个键。 它将使用什么密钥你有.ssh / id_dsa和.ssh / id_ecdsa哪些当然会晕过公钥authentication。

我通过将〜/ .ssh / id_rsa.pub的内容复制到EC2实例上的〜/ .ssh / authorized_keys来解决这个问题。

这是在文档中指定的: http : //docs.aws.amazon.com/opsworks/latest/userguide/security-ssh-access.html

然后我可以使用这个命令ssh:

 ssh ec2-user@[ip.address] 

我也收到:权限被拒绝。

我用了 :

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

答复是:

 debug1: No more authentication methods to try. 

input命令:

 ssh-add -l 

但是答复是空的

所以,我认为笔文件格式有问题。 接下来,我发现从ec2 web下载的笔文件,并将其移动。 在此之前,我创build了一个新文件,并将文件从下载的pem文件parsing到目录“.ssh”,然后:

 ssh-add filename 

哪个成功了。

我花了整整一天search互联网的答案。 我的问题完全一样。 我摆弄许可问题,来回转移,但没有解决我的问题。 在用一个新的密钥进行testing并开始/终止一对实例之后,最后我发现它必须在不同地区使用相同的密钥名称。

这就是“权限被拒绝(publickey)”发生在我身上:
1.按照练习册,selectus-east-1作为默认区域
2.创build一个密钥名称“mykey”
通过下面的例子来探索AWS世界。
4.有一天,尝试testing悉尼地区的速度,切换到悉尼地区作为默认开启。
5.创build另一个密钥,将其命名为“mykey”,而不用考虑,但不要使用它通过cli连接数天。
6.尝试使用cli连接到AWS。
7.得到“权限被拒绝(publickey)”。
花了很多时间来debuggingSSH问题,直到我注意到键/区域问题。

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

为了避免这个问题,我认为命名关键的最佳做法是在其中附上一个区域。

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

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

我将权限更改为600,尽pipepem文件的权限已经是644。 这工作:希望它有帮助