ChatGPT解决这个技术问题 Extra ChatGPT

Amazon EC2 权限被拒绝(公钥)

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

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

不过,最初我无法通过 ssh 连接到实例,我必须停止并重新启动实例,然后才能连接。在重新启动之前,我刚刚得到了响应。

Permission denied (publickey).

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

Permission denied (publickey).

我已经尝试重新启动实例,但没有任何乐趣。

谁能在这里指出我正确的方向?昨晚工作的相同命令不再工作,我正在从我的 Macbook Pro 连接。


G
Gray

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

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 中工作。当我关闭终端窗口并打开另一个窗口时,我不再拥有该密钥对而没有明确的。


谢谢伙计,一直忘记使用“ec2-user”部分,返回的错误消息对那个错误的信息不是很丰富
如果是 ubuntu 实例,使用 ssh -i ~/.ssh/[keypair name] ubuntu @[ec2 instance ip]
Elastic Map Reduce 集群 --> hadoop @[ec2 instance ip]
尝试更改用户名。如果你在 Ubuntu 上,'ubuntu' 应该是你的用户名。
疯狂的事情,我正在搜索“ubuntu ami 14.04 permission denied publickey aws”,而需要该帐户的 ubuntu 是天赐之物,我没有在任何文档中阅读此内容,有人可以指导我吗?
R
RyanM

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

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


重新安装实例、更改键值对等数小时 - 结果就是这个用户名!谢谢 :)
谢谢你的提示。在我的情况下正好相反,我需要使用 ubuntu 作为用户名。
不为我工作。使用 Bitnami AMI,他们说 bitnami 是用户名,使用正确的 .pem,在新的 shell 中启动,什么都没有。非常令人沮丧,这是没有进展的第二天。
B
Bryan Rink

我遇到了类似的问题,结果证明是对主文件夹的权限。谢天谢地,我仍然打开了另一个现有的 ssh 连接,因此我能够检查 ec2 实例上的日志:

$ sudo 少 /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

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


如果您仍然没有打开连接怎么办?
回答了我自己的问题:将 EBS 卷附加到不同的 EC2,进入并更改权限,然后重新附加到您关心的实例
+1 我们遇到了同样的问题,这是亚马逊支持团队向我们提供的确切回复。主文件夹的权限是罪魁祸首。
是的!!这正是问题所在,并且没有第二个连接来进行任何侦查,这篇文章是一个救生员!
@Nate 我尝试将 EBS 卷附加到另一个实例,但现在我在该实例上遇到了同样的问题。有道理,因为现在该实例具有错误的权限。你是怎么避免的?
s
sth

请注意,重启实例后,dns 名称发生了变化。我为此跌倒了好几次。密钥文件仍然有效,但“服务器名”已更改。


谢谢你的提示。那也是我的问题。
B
Bruno Bronosky

谢谢!

我非常感谢@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

T
TYMG

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

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

Y
Yagnesh Khamar

这是我们处理 ssh 时的常见问题。

在基于 Mac 或 Linux 的系统中,可以遵循以下路径:

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

但是windows系统存在问题,因为chmod不是cmd或Powershell中的命令。

要在 Windows 上使用 ssh,我们必须遵循以下过程:(注意:此过程仅适用于 PowerShell,不适用于 CMD。我建议在管理员模型中使用 PowerShell。)

以下是步骤:

在管理员模式下打开 Powershell。转到保存 pem 文件的文件夹。 RUN 依次执行以下命令:

这里 Pem 文件的名称是 key.pem icacls.exe key.pem /reset // 撤销所有权限 icacls.exe key.pem /grant:r "$($env:username):(r)" // 授予所有以前的权限 icacls.exe key.pem /inheritance:r // 删除所有的继承

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

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

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

希望这能拯救你的一天。

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


S
Seeker

确保您的私钥的路径正确。

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


T
Tadele Ayelegn

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

Services -> Compute -> EC2 -> Running Instances > 并选择你想要ssh的实例 -> 连接

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

https://i.stack.imgur.com/k7Gap.png

如果你使用数字 4 而不在它前面加上 ec2-user@ 你会得到

Permission denied (publickey).

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


C
ChrisJF

我通过将 ~/.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]

g
gravity

我还收到:权限被拒绝。

我用了 :

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

回应是:

debug1: No more authentication methods to try.

输入命令:

ssh-add -l

但是回复是空的

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

ssh-add filename

这是成功的。


这是一个答案/解决方案吗?从我读到的内容,你是否真的成功并不完全清楚。我将根据我认为您的意思提出一个edit,但如果它不准确,请将其回滚。
F
FrankCJ

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

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

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

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


这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
我将默认区域设置为 us-east-1,并创建了一个名为“mykey”的密钥。后来我更改为悉尼区域,并创建了另一个名为“mykey”的密钥。然后当我
这工作谢谢!我得到的密钥是我在登录不同区域时使用的密钥。
g
gaurav arora

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


佚名

有同样的问题,这是你应该做的。首先,如果您有 Windows,请使用 Babun 命令行,这与 Linux 类似。获得该命令行后,打开它并输入 ssh-i [key pair path] [username]@[EC2 public IP]. 要查找密钥对的路径,请转到存储密钥的文件,按住 shift 并右键单击并单击复制路径,然后将其粘贴到路径在上面的命令中。您可能会在您粘贴的路径的外部获得“”标记,以及 \ 反斜杠。删除 "" 标记并将 \ 反斜杠替换为常规斜杠 /。这在我遇到的这种情况下有效,祝你好运。


e
entropy

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


c
coder3

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