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。 这工作:希望它有帮助