Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 亚马逊EC2权限被拒绝(公钥)_Ssh_Amazon Web Services_Amazon Ec2 - Fatal编程技术网

Ssh 亚马逊EC2权限被拒绝(公钥)

Ssh 亚马逊EC2权限被拒绝(公钥),ssh,amazon-web-services,amazon-ec2,Ssh,Amazon Web Services,Amazon Ec2,这似乎是一个常见的问题,但我的具体情况似乎有点不同 我使用命令行工具设置了一个新的AmazonEC2实例,并通过SSH连接,还做了一些配置工作 但是,最初,我无法使用ssh连接到实例,我必须停止并重新启动实例,然后才能连接。在重新启动之前,我刚刚得到了回复 Permission denied (publickey). 那是昨天晚上,今天早上我回到同一个例子,现在我得到的是 Permission denied (publickey). 我尝试重新启动该实例,但毫无乐趣 有人能给我指一下正确的方

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

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

但是,最初,我无法使用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中工作。当我关闭“终端”窗口并打开另一个窗口时,我不再有没有明确的密钥对可用。

我遇到了类似的问题,结果是主文件夹的权限问题。谢天谢地,我仍然打开了另一个现有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用户


我希望这对其他人有所帮助。

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

请确保私钥的路径正确


如果您的ssh客户端找不到您试图提供的私钥,奇怪的是,它不会给您一个错误!它就是用不到那把钥匙。它将使用您在.ssh/id_dsa和.ssh/id_ecdsa下拥有的任何密钥,这当然会减弱公钥身份验证。

这对我来说是因为我没有使用正确的用户名。当我使用教程中使用的AMI时,我可以登录,但当我尝试使用不同的AMI(来自Bitnami的ubuntu+LAMP)时,我会得到
权限拒绝(公钥)。
错误。我终于意识到,如果我将教程ami的用户名从
ubuntu
更改为
ec2 user
,我将得到相同的错误


因此,快速搜索一下google就会知道Bitnami AMIs的用户名是
Bitnami
。问题解决了

我通过将~/.ssh/id_rsa.pub的内容复制到EC2实例上的~/.ssh/authorized_密钥来解决这个问题

文件中对此进行了规定:

然后我可以使用以下命令进行ssh:

ssh ec2-user@[ip.address]
非常感谢。 我真的很感谢@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

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

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

希望这能帮助像我这样的新手


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

我还收到:权限被拒绝

我用过:

ssh -v -i ~/.ssh/pemfile ec2-user@xx.xx.xx.xx
答复是:

debug1: No more authentication methods to try.
输入命令:

ssh-add -l
但回答是空的

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


这是成功的。

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

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

我将权限更改为600,尽管pem文件上的权限已经是644。这是有效的:p希望它有帮助。有同样的问题,这里是你应该做的。 首先,如果您有Windows,请使用Babun命令行,它与Linux命令行类似。 有了该命令行后,打开它并键入
ssh-i[密钥对路径][用户名]@[EC2公共IP]。

要查找密钥对的路径,请转到存储密钥的文件,按住shift键并单击鼠标右键,然后单击“复制路径”,然后将其粘贴到上面命令中路径所在的位置。您可能会在粘贴的路径外侧得到“”标记,并出现\反斜杠。删除“”标记并将\反斜杠替换为常规斜杠/。这在我遇到的这种情况下起了作用,祝您好运。

从cli连接到EC2有点棘手,至少第一次是这样。 如果你去`

服务->计算->EC2->运行实例>,然后选择 您想要ssh->connec的实例
ssh -i [key name] ubuntu@[EC2 instance ip]
Permission denied (publickey).