“未受保护的私钥文件!”在SSH连接亚马逊EC2实例(AWS)时出错。

974

我在Amazon EC2创建了一个新的Linux实例,并下载了.pem文件以允许我进行SSH连接。

当我尝试使用以下命令进行ssh

ssh -i myfile.pem <public dns>

我得到:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

根据这篇文章的指示,我尝试对.pem文件执行chmod +600操作,但现在当我使用ssh时,只出现如下提示:

Permission denied (publickey).

我在犯什么学生错误? .pem 文件在我的主文件夹中(在 macOS 中)。它的权限如下:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
当您使用错误的pem文件时,也会出现此错误。 - Rahul Prasad
请确保在创建和选择密钥对作为指定的密钥使用之后再创建实例。我曾经反其道而行之。 - Gary
我正在使用WinSCP在Windows上操作。由于使用了PuTTYgen从pem文件生成的myfile.ppk,所以与chmod 400 myfile.pem无关。 - eQ19
重要提示:这也表明该文件可以被其他用户在Windows中访问。因此,您可以通过在Windows中右键单击关键文件并限制权限来更改文件权限。(完整的说明和截图请参见此处:https://superuser.com/questions/1296024/windows-ssh-permissions-for-private-key-are-too-open)对我有用。 - Hissaan Ali
如果您正在使用WSL,这个答案可能会对您有所帮助:https://stackoverflow.com/a/75001941/12326605 - undefined
43个回答

1908

问题在于文件权限设置有误。

通过执行以下命令轻松解决 -

chmod 400 mykey.pem

摘自AWS说明 -

您的密钥文件不能公开查看以使SSH工作。 如有需要,请使用此 命令:chmod 400 mykey.pem

400将其保护为只读,并仅对所有者可见。


4
非常感谢!chmod 400对于mykey.pem文件有什么作用? - Costa Michailidis
40
400将文件设置为只读且仅限所有者访问。 - Kof
7
这个命令+ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP解决了问题。也许应该把这个作为被接受的答案... - c4k
使用符号模式可以使其更易于阅读:chmod u=rw,og= mykey.pem 设置用户的读写权限,但其他人和组没有任何权限。 - Steve Friedl
最好使用“puttygen server.ppk -O private-openssh -o server.pem”命令将那个愚蠢的ppk文件转换为pem文件。在执行该命令之前,请确保运行“sudo apt-get install putty-tools”。 - PanDe
对我来说很有效。我支持你。 - Naren Verma

286

你可能在使用错误的用户名登录,因为——

  • 大多数Ubuntu镜像都有一个名为ubuntu的用户
  • Amazon的AMI是ec2-user
  • 大多数Debian镜像都有rootadmin用户

要登录,你需要调整你的ssh命令:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

30
使用"ssh -i key.pem ubuntu@servername"命令连接到服务器。其中,"key.pem"是私钥文件名,"ubuntu"是用户名,"servername"是服务器名称。 - jsh
44
错误信息已经表达了一切:.pem证书文件的保护程度不够。请按下面建议的方法 chmod 400 xyz.pem 进行操作。 - allprog
3
@allprog 对我来说,这只会导致出现“Permission denied (publickey)”这个错误提示,没有其他信息... - Aram Kocharyan
12
这不是解决方案——下载的密钥文件默认具有844个文件权限。应该将其修改为400,运行chmod 500 <path_to_pem_file>即可。 - Elad Meidar
如果您知道IP地址 - nslookup IP_ADDRESS 将告诉您FQDN。 - Alex Young
显示剩余2条评论

77

我知道现在这个时间点来参与可能有些晚了...但是以下方法始终适用于我:

##步骤 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

##步骤2,只需使用SSH登录 :)

ssh user_name@<instance public dns/ip>

例如

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

“ssh-add”和将*.pem文件复制到~/.ssh文件夹中是一样的吗? - Incerteza
1
仅仅复制*.pem文件到~/.ssh文件夹是不够的,你必须将其添加到文件夹中并运行ssh-add命令。 - super_p
很晚才加入游戏,但为了澄清一些事情... 1. 将 .pem 文件添加到 ~/.ssh 目录中(如果需要,请创建它),2. 使用 ssh-add 命令将身份添加到认证代理;这意味着在使用 ssh 时不必指定 .pem 文件。 - Ian Atkin
2
在执行 ssh-add ¬/.ssh/key.pem 命令后,出现了“无法打开到您的身份验证代理的连接”的错误。eval ssh-agent -s 命令报告 SSH_AGENT_PID=3409;而 ssh-add 命令则给出了与上述相同的错误提示……请问有什么帮助吗? - Tariq
哇,这对我未来连接我的VPS非常方便。谢谢伙计 :) - Ahmad Mushtaq

42

好的,对我有效的唯一方法是:

  1. 更改密钥的权限

    chmod 400 mykey.pem

  2. 确保使用ec2-user和正确的ec2-99...地址登录。 ec2-99地址在您登录并查看实例列表时,aws控制台底部会显示

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


我找不到 ec2-99 的地址。你能帮我吗? - Adil Malik
1
将mykey.pem文件权限设置为400: chmod 400 mykey.pem 使用以下命令以ubuntu身份登录: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com - Gal Bracha

35

看看这篇文章。你不使用公共DNS,而是使用表单

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

在您的 AMI 面板上可见名称的位置


小改进:当尝试以root身份登录时,AWS会提示以下内容:“请使用ec2-user用户而不是root用户登录。” - Andre Schweighofer
"root@"是其他答案中大家都缺失的部分。你的回答有帮助!还有就是chmod命令。" - lordB8r
@lordB8r 这个用户名取决于使用的 AMI。请参考 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectingPuTTY。 - qwr

29

在Windows中,您可以进入PEM文件的属性,然后转到安全选项卡,再转到高级按钮。

取消继承和所有权限,然后将完全控制权授予自己。之后SSL将不会再给您相同的错误。


18

12

我知道这个问题已经有答案了,但是对于那些尝试了所有方法却仍然遇到烦人的“Permission denied (publickey)”错误的人。请尝试使用SUDO运行您的命令。当然,这只是一个临时解决方案,您应该正确设置权限,但至少这将让您确定您当前的用户没有以所需权限运行(如您所假设的那样)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

这样做后,您会收到以下消息:

Please login as the user "ec2-user" rather than the user "root"

这也没有得到充分的记录。在这种情况下,请执行以下操作:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

然后您将获得荣耀:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

11

2022年2月更新:

查看在AWS上ssh到EC2实例的说明:

enter image description here

然后,你可以找到"No.3"在下面说的内容:

enter image description here

因此,像"No.3"上面所说的运行以下命令:

chmod 400 myKey.pem

8

在Mac终端中,执行“chmod 400 xyz.pem”并不能解决权限被拒绝的问题。对于Ubuntu用户,我建议:

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com(注意用户是ubuntu)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接