这似乎是一个常见的问题,但我的具体情况似乎有点不同。
我使用命令行工具设置了一个新的Amazon EC2实例,并通过SSH连接并完成了一些配置工作。
最初,我不能ssh到实例,我必须停止并重新启动实例,然后我可以连接。在重新启动之前,我得到了回复。
Permission denied (publickey).
那是昨晚,今天早上我回到同一个实例,现在我得到的只是
Permission denied (publickey).
我试过没有快乐重启实例。
有人能指出我在正确的方向吗?昨晚工作的命令不再有效,我从Macbook Pro连接。
答案 0 :(得分:75)
我会回答我自己的问题,以防其他人看到同样的事情......昨晚我做了:
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中有效。当我关闭终端窗口并打开另一个时我不更长时间没有明确的那个密钥对。
答案 1 :(得分:28)
这种情况发生在我身上,因为我没有使用正确的用户名。我在使用我正在关注的教程中使用的AMI时能够登录,但是当我尝试使用不同的AMI(来自Bitnami的ubuntu + LAMP)时,我会收到Permission denied (public key).
错误。我终于意识到,如果我将教程ami的用户名从ubuntu
更改为ec2-user
,我会得到同样的错误。
所以快速谷歌告诉Bitnami AMI的用户名为bitnami
。问题解决了。
答案 2 :(得分: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
我希望这可以帮助别人。
答案 3 :(得分:12)
请注意,重新启动实例后,dns名称已更改。我多次摔倒了。密钥文件仍然有效,但“servername”已更改。
答案 4 :(得分:3)
我非常感谢@ Trevor的回答。我将添加这个小技巧,我现在用它来避免将来出现这个问题。
因为您必须为每个可用区创建不同的密钥对,所以管理它们以及使用它们的命令变得非常麻烦。通过~/.ssh/config
中的正确设置,我的ssh命令就像:
ssh ec2-52-10-20-30.us-west-2.compute.amazonaws.com
这是美国West 2可用区域中服务器的完整公共DNS。选择正确的用户名和密钥是因为:
## ~/.ssh/config
Host *.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ssh/bruno-bronosky-aws-us-west-2.pem
答案 5 :(得分:2)
如果EC2实例使用Ubuntu ami 14.04。尝试添加' ubuntu @'在EC2实例ip之前。
ssh -i [key name] ubuntu@[EC2 instance ip]
答案 6 :(得分:1)
确保私钥的路径正确无误。
如果你的ssh客户端找不到你想要提供的私钥,奇怪的是它不会给你一个错误!它只是不会使用该密钥。它将使用你在.ssh / id_dsa和.ssh / id_ecdsa下拥有的密钥,这当然会模糊公钥认证。
答案 7 :(得分:0)
我通过将〜/ .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]
答案 8 :(得分:0)
我花了一整天时间在互联网上寻找答案。我的问题完全相同。我摆弄了许可问题,来回改变,但没有解决我的问题。 在使用新密钥进行测试并启动/终止一些实例之后,最后我发现它与不同区域中的相同密钥名称有关。
这就是“Permission denied(publickey)”发生在我身上的原因:
1.按照练习册,选择us-east-1作为默认区域
2.创建密钥名称“mykey”
3.通过以下示例中的示例探索AWS世界。
4.有一天,尝试测试悉尼区的速度,默认切换到悉尼区
5.创建另一个密钥,将其命名为“mykey”,但不要使用它来连接cli几天。
6.尝试使用cli连接到AWS
7.得到“许可被拒绝(公钥)”
8.花了好几个小时调试ssh问题,直到我注意到密钥/区域问题。
希望这可以帮助像我这样的新手。
为了避免这个问题,我认为命名密钥的最佳做法是在其中附加一个区域。
答案 9 :(得分: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
哪次成功。
答案 10 :(得分:0)
我将权限更改为600,尽管pem文件的权限已经是644。这有效:p希望它有所帮助
答案 11 :(得分:0)
有同样的问题,这是你应该做的。
首先,如果你有Windows,请使用Babun命令行,类似于Linux命令行。
获得该命令行后,打开它并键入ssh-i [key pair path] [username]@[EC2 public IP].
要查找密钥对的路径,请转到存储密钥的文件,按住shift并右键单击并单击复制路径,然后将其粘贴到上面命令中路径所在的位置。你可能会得到""粘贴路径外侧的标记和\反斜杠。删除""标记并用常规斜杠替换\反斜杠。这种情况在我这样的情况下起作用,祝你好运。
答案 12 :(得分:0)
至少从第一次开始,从cli连接到EC2有点棘手。 如果您去`
服务->计算-> EC2->运行实例>并选择 您要ssh的实例->连接
`,然后您将看到描述如何连接到它的对话框。部分内容如下所示。
如果使用数字4而不用ec2-user@
开头,则会得到
Permission denied (publickey).
只需复制并粘贴以下“示例:”中的内容。
答案 13 :(得分:0)
在我的情况下,原因是我使用chmod更改了根目录文件夹的权限。在AWS网站上,他们描述了使用另一种临时实例将权限改回很长的方法。但是,我只是终止了旧实例并启动了另一个实例,这次没有对根目录的权限进行任何更改,一切正常。
答案 14 :(得分:0)
我有同样的问题。为我解决的是在目录和PEM文件周围放置引号。过去我从来没有这样做。我不确定为什么这次我被迫这样做。我的PEM文件位于其他项目的同一目录中。
答案 15 :(得分:0)
这是我们处理ssh时的常见问题。
在基于Mac或Linux的系统上安装时,可以遵循以下路径:
chmod 400
但是Windows系统存在问题,因为chmod
不是cmd或Powershell中的命令。
要在Windows上使用ssh,我们必须遵循以下过程: (注意:此过程仅适用于PowerShell,不适用于CMD。我建议在管理员模型中使用PowerShell。)
以下是步骤:
Pem文件的名称为key.pem
icacls.exe key.pem /reset
//取消所有特权
icacls.exe key.pem /grant:r "$($env:username):(r)"
//授予所有以前的特权
icacls.exe key.pem /inheritance:r
//删除所有继承
希望这会节省您的时间。
这是来自以下链接的参考:CHMOD 400 in WINDOWS