“不受保护的私钥文件!”使用SSHAmazon EC2实例(AWS)时出错

我在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.pemPermission denied (publickey).

这篇文章之后,我尝试chmod +600.pem文件,但现在当我ssh时,我只是得到

Permission denied (publickey).

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

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem
639475 次浏览

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

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

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

您可能使用错误的用户名登录,因为-

  • 大多数Ubuntu图像都有一个用户ubuntu
  • 亚马逊的AMI是ec2-user
  • 大多数Debian图像都有rootadmin

要登录,您需要调整ssh命令:

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

问题是文件的权限设置错误。

通过执行很容易解决-

chmod 400 mykey.pem

取自AWS指令-

您的密钥文件不能公开查看,SSH才能工作命令:chmod 400mykey.pem

400通过使其只读且仅供所有者使用来保护它。

ssh-i /.pemuser@host-machine-IP

我想这是因为你输入了错误的凭据或者,您使用的是公钥而不是私钥或者,您的端口权限对ALL打开ssh。这对亚马逊不利。

核对清单:

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

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

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

好吧,伙计,唯一对我有用的是:

  1. 更改密钥的权限

    CHMOD 400mykey.pem

  2. 请确保使用ec2-user和正确的ec2-99…地址登录。当您登录并看到您的实例列出时,ec2-99地址位于aws控制台的底部

    ssh-imykey.pemec2-user@ec2-99-99-99-99.compute-1.amazonaws.com

更改密钥文件的权限:

chmod 400 key-file-name.pem

请参阅AWS留档以连接到实例:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#EC2_ConnectToInstance_Linux

对我来说,解决这个问题的方法是在apps目录中移动. pem文件。Soo说foapp是我应用程序的名称。我直接把它放在那里。

我知道这是非常游戏迟到了……但这总是对我有用:

步骤1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

第2步,简单地ssh:)

ssh user_name@<instance public dns/ip>

e. g.

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

希望这能帮助别人。

在Mac终端,做“chmod 400xyz.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)

我知道这个问题已经得到了回答,但是对于那些已经尝试过所有这些方法的人来说,你仍然会得到烦人的“权限被拒绝(公钥)”。尝试使用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___|\___|___|

做一个CHMOD 400yourkeyfile.pem如果您的实例是Amazon linux,则使用ssh-iyourkeyfile.pemec2-user@ip为ubuntussh-iyourkeyfile.pemubuntu@ip为centosssh-iyourkeyfile.pemcentos@ip

SSH密钥和文件权限最佳实践:

  • . ssh目录-0700(仅由所有者)
  • 私钥/. pem文件-0400(所有者只读)
  • 公钥/. pub文件-0600(仅由所有者读写)

    chmod XXXX file/directory

使用PuTTY的替代登录。它很好,但需要几个步骤。

  1. 获取您第一次创建EC2实例时生成的. pem。
  2. 使用PuttyGen转换. pem文件. ppk,因为PuTTY不读取. pem。
  3. 打开PuTTY并输入您的主机名称,这是您的实例用户名+公共DNS(例如ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com)。不是您的AWS帐户用户名。
  4. 然后导航到连接>SSH>身份验证。然后添加您的. ppk文件。单击浏览,上面写着"用于身份验证的私钥文件"
  5. 单击打开,您应该能够立即建立连接。

我在Windows中使用PuTTY 0.66。

这个错误背后可能有三个原因。

  1. 你用错了钥匙。
  2. 您的密钥没有正确的权限。您需要将其更改为400。
  3. 您使用了错误的用户。Ubuntu映像的用户为ubuntu,Amazon的AMI为ec2-user,debian映像的用户为rootadmin

以下是Linux用户使用. pem文件连接服务器的简单步骤:

步骤1:到pem文件的位置并将其复制到home. ssh位置。

cp example.pem ~/.ssh/example.pem

Step2:修改权限

chmod 400 ~/.ssh/example.pem

Step3:运行以下命令

ssh -i ~/.ssh/example.pem ec2-user@host.com

由于此命令太长,因此您可以使用以下命令创建this的别名:

 vim ~/.bashrc

在最后以以下方式编写相同的命令。

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

现在重新启动您的系统并使用sshConnect连接您的服务器。

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

sudo chmod 0600 myfile.pem

然后尝试ssh它会完美地工作。

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

BY默认权限不允许使用pem密钥。您只需要更改权限:

CHMOD 400xyz.pem

如果ubuntu实例,则使用以下方式连接:

ssh-ixyz.pemubuntu@ec2-youraws.amazonaws.com

除了其他答案,以下是我为使其发挥作用所做的工作:

  • 将密钥复制到. ssh文件夹,如果您还没有:

cp key.pem ~/.ssh/key.pem

  • 给予密钥适当的权限

chmod 400 ~/.ssh/key.pem

val'ssh代理-s'ssh添加

  • 然后,添加密钥

ssh-add ~/.ssh/key.pem

现在您应该能够ssh EC2(:

对我来说,问题是我的. pem文件在我的一个NTFS分区中。我将其移动到我的linux分区(ext4)。

通过运行给予所需权限:

chmod 400 my_file.pem

它奏效了。

这只是您的aws pem密钥的权限问题。

只需使用下面的命令将pem key的权限更改为400。

chmod 400 pemkeyname.pem

如果您没有权限更改文件的权限,您可以使用sudo,如下面的命令。

sudo chmod 400 pemkeyname.pem

我希望这应该工作得很好。

我看到了这个问题背后的两个原因

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

CHMOD 400xyz.pem

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

sudo ssh-i{keyfile}ec2-user@{远程主机的IP地址}

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

  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

密钥文件不应公开查看,因此使用权限400

chmod 400 keyfile.pem

如果上面的命令显示权限错误使用

sudo chmod 400 keyfile.pem

现在ssh进入ec2机器,如果你仍然面临这个问题,请使用ec2-user

ssh-ikeyfile.pemec2-user@ec2-12-34-56-78.compute-1.amazonaws.com

在windows您可以转到pem文件的属性,然后转到安全选项卡,然后转到前进按钮。

删除继承和所有权限。然后授予自己完全的控制权。毕竟SSL不会再给你同样的错误。

.400通过使其只读且仅供所有者使用来保护它。
您可以从ASW指南中找到答案。

chmod 400 yourPrivateKey.pem

在此处输入图片描述

我所做的是编辑默认安全组以允许端口22的入站TCP流量:

输入图片描述

在windows,

  • 右键单击pem文件。然后选择属性。
  • 选择安全选项卡-->单击高级按钮-->禁用继承-->删除此对象的所有继承权限图片1
  • 点击添加按钮-->选择主体-->在输入框中输入您的用户名-->点击校验名称按钮-->点击确定-->点击确定-->点击确定-->点击确定-->点击确定Image2

您可以从ASW指南中找到答案。400通过使其只读且仅为所有者来保护它。

chmod 400 mykey.pem

您还应该检查您的. pem文件是否没有损坏。我花了大约一个小时挠头,决定使用这一行检查

openssl rsa -check -in test.pem -noout

如果它返回“RSA密钥ok”,那么你很好。如果不是,请确保您拥有正确的文件并或出于任何原因正确复制它。

默认情况下,每当您下载密钥文件时,它都具有644个权限。

因此,每次下载新密钥时都需要更改权限。

 chmod 400 my_file.pem

在Windows中,转到.pem文件,右键单击并选择属性

  • 转到安全合规标签中的高级

  • 禁用和删除继承。

  • 然后按添加并选择一个主体。

  • 添加帐户用户名作为对象名,然后按ok。

  • 给所有权限。

  • 应用并保存更改。

现在检查上面的命令

2022年2月更新:

请参阅描述在AWS上ssh到EC2实例

输入图片描述

然后,你可以在下面找到“三号”

输入图片描述

因此,运行下面的命令,如上面“三号”所说:

chmod 400 myKey.pem

如果您在Windows 10上使用ubuntu子系统,并且如果您sudo chmod将密钥更改为400,那么它可能仍然会错误地显示“Load key pem:权限被拒绝”

ls-al,您将看到root现在拥有该文件!将其分配给您登录的用户,然后它将工作。

您需要对密钥文件(myfile.pem)设置一些保守权限。尝试将其更改为r--------400

你不是root,然后运行这个命令

sudo chmod 400 -R myfile.pem

不是root然后运行此命令

chmod 400 -R myfile.pem

对于Windows 10。

。右键单击文件.属性->安全->禁用继承.现在添加->您的用户(窗口),只有“读”.单击确定

现在它为我工作

如果从 Windows 连接,请在本地计算机上执行下列步骤。

  1. 导航到. pem 文件。

  2. 右键单击. pem 文件并选择 Properties。

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

  4. 选择高级。

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

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

  7. 选择 Add,选择主体,输入用户名,然后选择 OK。

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

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

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

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

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

从命令提示符运行以下命令。

  1. 运行以下命令重置和删除显式权限: Exe $path/set
  2. 运行以下命令将读权限授予当前用户: icacls.exe $path/GRANT: R“ $($env: USERNAME) : (R)”
  3. 运行以下命令禁用继承并删除继承的权限: icacls.exe $path/Heritage: r

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

只是你的 aws pem 密钥的许可问题。

只需使用以下命令将 pem 键的权限更改为400。

chmod 400 pemkeyname.pem

如果您没有更改文件权限的权限,可以使用如下命令所示的 sudo。

sudo chmod 400 pemkeyname.pem

否则,如果没有工作为您只是按照这个视频更改键对您的 EC2实例。现在可以在实例上安装公钥/私钥对。

Https://youtu.be/lvllrcrs8b4

当您创建新的 EC2实例时,会有一些注释提示您更改文件权限

很容易通过执行-解决

Chmod 400 mykey.pem

Windows10-PowerShell

icacls.exe .\Desktop\xxxx.pem /reset
icacls.exe .\Desktop\xxxx.pem /grant:r "$($env:USERNAME):(r)"
icacls.exe .\Desktop\xxxx.pem /inheritance:r


ssh -i .\Desktop\xxxx.pem ec2-user@54.2xx.xxx.x

Macos & linux

chmod 400 ~/Desktop/xxxx.pem


ssh -i ~/Desktop/xxxx.pem ec2-user@54.2xx.xxx.x

如果没有权限,不要忘记 sudo。 Sudo ssh-i myfile.pem < < ssh _ user > >@< >