ChatGPT解决这个技术问题 Extra ChatGPT

“未受保护的私钥文件!”使用 SSH 连接到 Amazon 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.pem
Permission denied (publickey).

this post 之后,我尝试 chmod +600 .pem 文件,但现在当我 ssh 时,我得到了

Permission denied (publickey).

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

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem
当您使用错误的 pem 文件时也会出现此错误。
还要确保在创建并选择密钥对作为要使用的指定密钥之后创建实例。我反其道而行之。
我在带有 WinSCP 的 Windows 中。有 nothing to dochmod 400 myfile.pem,因为它使用 PuTTYgen 从 pem 文件生成的 myfile.ppk
重要提示:它还表明该文件可以被其他用户在 windows 中访问。因此,您可以通过右键单击 Windows 中的密钥文件并限制权限来更改文件权限。 (此处带有屏幕截图的完整说明:superuser.com/questions/1296024/…)为我工作

K
Kof

问题是文件上有错误的mod。

通过执行轻松解决 -

chmod 400 mykey.pem

取自 AWS 说明 -

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

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


非常感谢! chmod 400 有什么作用?到 mykey.pem?
400 通过使其只读且仅供所有者使用来保护它。
这个命令 + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IP 解决了这个问题。也许这应该是公认的答案......
只是想让你知道这个答案有很大帮助!
使用符号模式可以使其更易于阅读:chmod u=rw,og= mykey.pem 为用户设置读+写权限,但其他人和组一无所获。
T
Till

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

大多数 Ubuntu 映像都有一个用户 ubuntu

亚马逊的 AMI 是 ec2-user

大多数 Debian 映像都有 root 或 admin

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

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

是的,这就完成了。我以为 SSH 会提示我输入用户名!
或 ssh -i key.pem ubuntu@servername
错误消息说明了一切:.pem 证书文件没有得到足够的保护。按照下面的建议执行 chmod 400 xyz.pem。
@allprog 对我来说,这只会导致它说 Permission denied (publickey). 而没有别的......
这不是解决方案 - 下载的密钥文件的文件权限默认为 844。应该是 400 chmod 500 <path_to_pem_file> 应该这样做。
P
PrasadK

我知道这对游戏来说已经很晚了......但这总是对我有用:

步骤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 文件夹一样吗?
>> 只是将 *.pem 文件复制到 ~/.ssh 文件夹是不一样的,您必须添加到文件夹然后运行命令 ssh-add。
游戏很晚了,但要添加一些说明... 1.将 .pem 文件添加到 ~/.ssh 目录(如果需要,请创建它), 2.使用 ssh-add 命令将身份添加到身份验证中代理人;这意味着在使用 ssh 时不必指定 .pem 文件
在 ssh-add 之后 ¬/.ssh/key.pem;收到错误无法打开与您的身份验证代理的连接。 eval ssh-agent -s 报告 SSH_AGENT_PID=3409; ssh-add 给出与上述相同的错误............这里有任何帮助请
哇,这对于我未来与我的 VPS 的所有连接将非常方便。谢了哥们 :)
b
bobobobo

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

更改密钥 chmod 400 mykey.pem 的权限 确保使用 ec2-user 和正确的 ec2-99... 地址登录。当您登录并看到您的实例列出 ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws 时,ec2-99 地址位于 aws 控制台的底部。 com


我找不到 ec2-99 地址。你能帮我么?
chmod 400 mykey.pem 使用 ubuntu 登录如下: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
r
renick

看看this article。您不使用公共 DNS,而是使用表单

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

名称在您的 AMI 面板上可见


为文章干杯,非常有用!
小改进:尝试以 root 身份登录时,aws 提示以下内容:“请以 ec2-user 用户而不是 root 用户身份登录。”
'root@' 是其他人在这个答案中所缺少的。你的帮助!那和chmod。
@lordB8r 用户名取决于使用的 AMI。请参阅docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
N
Nadeeshan Herath

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

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


t
ted

使用以下命令更改密钥文件的权限:

chmod 400 key-file-name.pem

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

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


R
Ricardo Cid

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

K
Kai - Kazuya Ito

2022 年 2 月更新:

请参阅 SSH 到 AWS 上的 EC2 实例的描述:

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

然后,您可以在下面找到“No.3”:

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

因此,按照上面的“No.3”运行以下命令:

chmod 400 myKey.pem

X
Xavi

在 Mac 终端中,执行“chmod 400 xyz.pem”对我没有帮助,它一直说权限被拒绝。对于 ubuntu 用户,我建议

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


S
Syed Priom

ssh -i /.pem user@host-machine-IP

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


J
Jagatveer Singh

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

您使用了错误的密钥。您的密钥没有正确的权限。您需要将其更改为 400。您使用了错误的用户。 Ubuntu 镜像有一个用户 ubuntu,亚马逊的 AMI 是 ec2-user,而 debian 镜像有 root 或 admin


R
Ryan

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

.ssh 目录 - 0700(仅限所有者)

私钥/.pem 文件 - 0400(所有者只读)

公钥/.pub 文件 - 0600(只能由所有者读写) chmod XXXX 文件/目录


C
Community

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

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

我在 Windows 中使用 PuTTY 0.66。


这可行,但是有没有办法直接从命令行使 ssh 连接工作?
R
Rodrigo Nantes

除了其他答案之外,这是我为此所做的工作:

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

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

授予密钥适当的权限

chmod 400 ~/.ssh/key.pem

启动 ssh-agent(感谢 https://stackoverflow.com/a/17848593 )

eval `ssh-agent -s` ssh-add

然后,添加密钥

ssh-add ~/.ssh/key.pem

现在您应该可以 ssh EC2 (:


G
Geralt of Ravia

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

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

 chmod 400 my_file.pem

M
Martin Prikryl

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

转到安全选项卡中的高级

禁用和删除继承。

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

添加帐户用户名作为对象名称,然后按确定。

给予所有许可。

应用并保存更改。

现在检查上面的命令


太好了,它有帮助。如果您不知道您的用户名,请转到 cmd 并输入“whoami”。它会显示您的用户名。
S
SeniorEngineer

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

chmod 400 mykey.pem

C
Codemaker

在窗户里,

右键单击 pem 文件。然后选择属性。

选择安全选项卡 --> 单击高级按钮 --> 禁用继承 --> 从此对象删除所有继承的权限

点击 Add 按钮 --> Select a principal --> 在输入框中输入您的用户名 --> 点击 Check Names 按钮 --> 点击 Ok --> 点击 Ok --> 点击 Ok -->点击确定


s
sathee005

执行 chmod 400 yourkeyfile.pem 如果您的实例是 Amazon linux,则使用 ssh -i yourkeyfile.pem ec2-user@ip for ubuntu ssh -i yourkeyfile.pem ubuntu@ip for centos ssh -i yourkeyfile.pem centos@ip


r
rahul kumar

默认情况下,权限不允许 pem 密钥。您只需要更改权限:

chmod 400 xyz.pem

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

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


R
Rishabh Agrahari

我的问题是我的 .pem 文件位于我的 NTFS 分区之一中。我把它移到了我的 linux 分区(ext4)。

通过运行提供所需的权限:

chmod 400 my_file.pem

它奏效了。


A
Abhijit Barua

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

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

chmod 400 xyz.pem

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

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


P
Prabuddha Chakraborty

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

为私钥设置正确的权限。下面的命令应该可以帮助您设置正确的文件权限。 chmod 0600 mykey.pem 您尝试登录的 ec2 用户错误。查看您的调试日志,我认为您已经生成了一个 Amazon linux 实例。该实例类型的默认用户是 ec2-user 。如果实例是 ubuntu ,那么您的默认用户将是 ubuntu 。 ssh -i privatekey.pem default_ssh_user@server_ip

注意:对于 Amazon Linux AMI,默认用户名是 ec2-user。对于 Centos AMI,默认用户名为 centos。对于 Debian AMI,默认用户名是 admin 或 root。对于 Fedora AMI,默认用户名是 ec2-user 或 fedora。对于 RHEL AMI,默认用户名是 ec2-user 或 root。对于 SUSE AMI,默认用户名是 ec2-user 或 root。对于 Ubuntu AMI,默认用户名是 ubuntu。否则,如果 ec2-user 和 root 不起作用,请咨询 AMI 提供商。

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


s
singh30

密钥文件不应公开查看,因此请使用权限 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


K
Kai - Kazuya Ito

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

sudo chmod 400 -R myfile.pem

不是 root 然后运行此命令

chmod 400 -R myfile.pem

K
Keith

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

导航到您的 .pem 文件。右键单击 .pem 文件并选择属性。选择安全选项卡。选择高级。确认您是该文件的所有者。如果没有,请将所有者更改为您的用户名。选择禁用继承并从此对象删除所有继承的权限。选择添加,选择主体,输入您的用户名,然后选择确定。在“权限条目”窗口中,授予读取权限并选择“确定”。单击应用以确保保存所有设置。选择确定关闭高级安全设置窗口。选择确定关闭属性窗口。您应该能够通过 SSH 从 Windows 连接到您的 Linux 实例。

在 Windows 命令提示符下,运行以下命令。

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

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


U
Ujwal Abhishek

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

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

chmod 400 pemkeyname.pem

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

sudo chmod 400 pemkeyname.pem

否则,如果您没有任何效果,请按照此视频更改您的 EC2 实例上的密钥。您现在可以在您的实例上安装公钥/私钥对。

https://youtu.be/LvLlRCrS8B4


f
fivedogit

清单:

您是否使用了正确的私钥 .pem 文件?它的权限设置是否正确? (我的亚马逊品牌 AMI 使用 644,但 Red hat 必须至少为 600 或 400。不了解 Ubuntu。)您在 ssh 行中使用了正确的用户名吗?亚马逊品牌 = “ec2-user”,红帽 = “root”,Ubuntu = “ubuntu”。用户可以指定为“ssh -i pem usename@hostname”或“ssh -l username -i pem hostname”


A
Ajai

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

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

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

第二步:更改权限

chmod 400 ~/.ssh/example.pem

第三步:运行以下命令

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

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

 vim ~/.bashrc

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

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

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