“未受保护的私钥文件!”在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个回答

2

我看到这个问题有两个原因:

1)访问密钥没有正确的权限。默认权限的pem密钥不允许进行安全连接。您只需要更改权限:

chmod 400 xyz.pem

2)还要检查您是否使用正确的用户凭据登录。否则,在连接时使用sudo。

sudo ssh -i {keyfile} ec2-user@{ip address of remote host}


2

我的问题在于我的.pem文件存放在我的NTFS分区之一中。我将其移动到我的Linux分区(ext4)。

通过运行以下命令授予所需权限:

chmod 400 my_file.pem

然后它就可以工作了。


2

看了你的帖子描述,我觉得你犯了两个错误:

  1. 为私钥设置正确的权限。以下命令可以帮助您设置正确的文件权限。

    chmod 0600 mykey.pem

  2. 尝试登录的ec2用户不正确

    从您的调试日志来看,我认为您已经生成了一个Amazon linux实例。该实例类型的默认用户是ec2-user。如果该实例是ubuntu,则默认用户将为ubuntu

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

来源:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

本文介绍了如何通过SSH连接到Amazon Elastic Compute Cloud (Amazon EC2) Linux实例。SSH是一种安全的网络协议,它可以让您远程连接到其他计算机或服务器,并在其中执行命令。

要连接到Linux实例,您需要获得密钥对和实例的公共DNS名称。为了确保安全连接,您也需要将IP地址添加到可信IP列表中。然后,您可以使用ssh命令在终端窗口中连接到实例。

如果您使用的是Windows操作系统,则可以使用PuTTY作为SSH客户端来连接到Linux实例。PuTTY是一种免费且易于使用的SSH客户端,它可以在Windows上运行。您只需将PuTTY与您的密钥配对,并输入实例的公共DNS名称,即可连接到实例。


2

您遇到的问题其实只是AWS pem密钥的权限问题。

请使用以下命令将pem密钥的权限更改为400即可解决问题。

chmod 400 pemkeyname.pem

如果您没有更改文件权限的权限,可以使用以下命令sudo。
sudo chmod 400 pemkeyname.pem

如果以上方法都无法解决问题,您可以通过观看这个视频来更改EC2实例上的密钥。您现在可以在您的实例上安装公共/私有密钥对。

https://youtu.be/LvLlRCrS8B4


2
如果您正在使用 Windows 连接,请在本地计算机上执行以下步骤:
  1. 导航到您的 .pem 文件。

  2. 右键单击 .pem 文件,选择“属性”。

  3. 选择“安全”选项卡。

  4. 选择“高级”选项。

  5. 验证您是否是该文件的所有者。如果不是,请将所有者更改为您的用户名。

  6. 选择“禁用继承”和“从此对象中删除所有继承权限”。

  7. 选择“添加”,选择主体,输入您的用户名,然后选择“确定”。

  8. 在“权限条目”窗口中,授予读取权限并选择“确定”。

  9. 单击“应用”以确保保存所有设置。

  10. 选择“确定”关闭“高级安全性设置”窗口。

  11. 选择“确定”关闭“属性”窗口。

  12. 现在您应该能够通过 SSH 从 Windows 连接到 Linux 实例。

从 Windows 命令提示符运行以下命令:

  1. 运行以下命令重置并删除显式权限:icacls.exe $path /reset
  2. 运行以下命令向当前用户授予读取权限:icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
  3. 运行以下命令禁用继承并删除继承的权限:icacls.exe $path /inheritance:r

现在您应该能够通过 SSH 从 Windows 连接到 Linux 实例。


2

如果您不是以root身份登录,则运行此命令

sudo chmod 400 -R myfile.pem

如果不是root用户,请运行以下命令。
chmod 400 -R myfile.pem

2

默认情况下,权限不允许使用pem密钥。

你只需要更改权限:

chmod 400 xyz.pem

如果是Ubuntu实例,则使用以下命令连接:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


2

密钥文件不应该公开可见,因此请使用权限400

chmod 400 keyfile.pem

如果上述命令显示权限错误,请使用以下命令:
sudo chmod 400 keyfile.pem

现在通过ssh登录到ec2机器,如果你仍然遇到问题,请使用ec2-user

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


2

只需将pem文件的权限更改为0600,仅允许允许的用户使用,它就像魅力一样工作。

sudo chmod 0600 myfile.pem

然后尝试使用ssh,它将完美地工作。

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

清单:

  1. 您是否使用了正确的私钥.pem文件?

  2. 它的权限设置是否正确?(我的亚马逊品牌AMI可使用644,但Red hat必须至少为600或400。不知道Ubuntu。)

  3. 您在ssh行中是否使用了正确的用户名?Amazon品牌="ec2-user",Red Hat="root",Ubuntu="ubuntu"。用户可以指定为"ssh -i pem usename@hostname"或"ssh -l username -i pem hostname"


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