警告:未保护的私钥文件!尝试通过SSH进入Amazon EC2实例时


190

我正在努力在Amazon EC2实例上设置Panda。昨晚我建立了我的帐户和工具,使用SSH与自己的个人实例进行交互没有问题,但是现在我不被允许进入Panda的EC2实例。 熊猫入门

我收到以下错误:

@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @

Permissions 0644 for '~/.ec2/id_rsa-gsg-keypair' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

为了将昨晚进入我的个人实例,我将密钥对更改为600,并尝试将权限设置为0,甚至生成新的密钥字符串,但似乎没有任何效果。

根本没有任何帮助!


嗯,似乎除非将目录的权限设置为777,否则ec2-run-instances脚本无法找到我的密钥文件。我是SSH的新手,所以我可能会忽略一些东西。


ec2-run-instances应该只需要一个密钥对名称,这就是Amazon一方的名字。SSH进入时只应使用实际的私钥(磁盘上的私钥)。从ec2-run-instances遇到什么错误?
user27619

2
这个问题的标题很糟糕。
MikeNereson 2011年

2
@MikeNereson:随时对其进行编辑,这就是我们使这里的事情变得更好的方式
Stu Thompson

您确定将其设置为0600(八进制),而不是600(十进制)吗?
海德

5
chmod 400 ~/.ssh/id_rsa 参考: stackoverflow.com/a/9270753/2082569
atulkhatri,2015年

Answers:


209

为了将昨晚进入我的个人实例,我将密钥对更改为600

这就是应该的样子。

EC2文档中,我们具有“如果您使用的是OpenSSH(或任何合理的偏执SSH客户端),则可能需要设置此文件的权限,以便您只能读取。” 您链接到的Panda文档链接到Amazon的文档,但实际上并没有传达这一切的重要性。

这个想法是,密钥对文件就像密码一样,需要受到保护。因此,您使用的ssh客户端要求确保这些文件的安全,并且只有您的帐户才能读取它们。

将目录设置为700实际上就足够了,但是只要文件为600,就不会伤害777。

您遇到的任何问题都是客户端问题,因此请确保在任何后续问题中包括本地操作系统信息!


3
我今天遇到一种情况,我希望密钥文件可以组可读(不使用ssh进行个人登录,而是在远程服务器上执行脚本,为此目的在远程服务器上使用专用用户,authorized_keys被锁定,因此仅脚本将运行,并且原始服务器上的多个人应有权运行该脚本)。哦,好吧,我想最简单的解决方法是将副本复制到〜/ .ssh /中,以供所有应具有访问权限的用户使用-或使用所有个人密钥填充authorized_keys。
tobixen

@tobixen:两年来了,但是...“正确”的解决方法是将密钥放置在专用用户中,并允许组用户sudo访问以专用用户身份运行该命令。
Stu Thompson

指向EC2文档的@StuThompson链接似乎已失效。你能更新吗?
Aniket Thakur

我看不到该怎么做才能使它正常工作,请提供答案:)
Pratik

@Pratik将密钥文件设置为600,将目录设置为777应该起作用。
Jamo

55

确保包含私钥文件的目录设置为700

chmod 700 ~/.ec2

您要对文件具有执行特权的任何特殊原因?
佐尔坦

1
@Zoltán是目录,而不是文件。
avmohan

我只是在.pem文件上使用了它,所以对我有用。
CGTheLegend'7

30

要解决此问题,1)您需要将权限重置为默认值:

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

如果遇到其他错误:确定要继续连接(是/否)吗?是无法将主机添加到已知主机(/home/geek/.ssh/known_hosts)列表中。

2)这意味着该文件的权限设置也不正确,可以通过以下方式进行调整:

sudo chmod 644 ~/.ssh/known_hosts

3)最后,您可能还需要调整目录权限:

sudo chmod 755 ~/.ssh

这应该使您重新启动并运行。


17

私钥文件应受到保护。在我的情况下,我已经使用public_key身份验证很长时间了,我曾经将私钥的权限设置为600(rw- --- ---),将权限设置为644(rw- r-- r--)。 .home文件夹中的.ssh文件夹将具有700个权限(rwx --- ---)。要进行设置,请转到用户的主文件夹并运行以下命令


设置.ssh文件夹的700权限

chmod 700 .ssh


设置私钥文件的600权限

chmod 600 .ssh/id_rsa


设置644公钥文件的权限

chmod 644 .ssh/id_rsa.pub


2

将您的私钥,公钥,known_hosts保留在同一目录中,然后尝试按以下方式登录:

ssh -I(small i) "hi.pem" ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
  • 相同目录, cd /Users/prince/Desktop。现在键入ls命令,您应该看到 **.pem **.ppk known_hosts

注意:您必须尝试从同一目录登录,否则将收到一个权限被拒绝的错误,因为它无法从当前目录中找到.pem文件。


如果您希望能够从任何目录进行SSH,则可以将以下内容添加到~/.ssh/config文件中...

Host your.server
HostName ec2-user@ec2-**-***-**-***.us-west-2.compute.amazonaws.com
User ec2-user
IdentityFile ~/.ec2/id_rsa-gsg-keypair
IdentitiesOnly yes

现在,您只需键入ssh your.server(或在“主机”之后放置的任何名称),无论目录位于何处,都可以SSH到服务器。


1

在Windows上,尝试使用git bash并在那里使用Linux命令。简单的方法

chmod 400 *****.pem

ssh -i "******.pem" ubuntu@ec2-11-111-111-111.us-east-2.compute.amazonaws.com

如果使用WSL,请确保将pem文件复制到Linux文件夹,因为chmod在/ mnt目录中无效。
Paulo Merson


0

我在考虑其他问题,如果您尝试使用不存在的其他用户名登录,这将是您收到的消息。

因此,我假设您可能正在尝试使用ec2-user进行ssh,但我记得最近例如大多数centos AMI使用的是centos user而不是ec2-user

因此,如果您要 ssh -i file.pem centos@public_IP告诉我,您正在尝试使用正确的用户名进行ssh,否则,即使在〜/ .ssh / id_rsa或file.pem上具有正确的权限,这也可能是您看到此类错误消息的强烈原因


0

对于任何偶然发现此问题的人,请注意:

如果您尝试使用与您共享的密钥进行SSH,例如:

ssh -i /path/to/keyfile.pem user@some-host

keyfile.pem与您共享的私钥/公钥在哪里,并且您正在使用它进行连接,请确保将其保存到~/.ssh/和中chmod 777

当文件保存在我的机器上的其他位置时尝试使用该文件,这是OP的错误。不确定是否直接相关。


0

解决方案是使它只能由文件的所有者读取,即八进制模式表示的后两位应该为零(例如mode 0400)。

OpenSSH authfile.c通过一个名为的函数在中对此进行检查sshkey_perm_ok

/*
 * if a key owned by the user is accessed, then we check the
 * permissions of the file. if the key owned by a different user,
 * then we don't care.
 */
if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

请参阅注释后的第一行:它针对文件的模式执行“按位与”运算,选择最后两个八进制数字中的所有位(因为代表07八进制0b111,其中每个位分别代表r / w / x) 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.