ChatGPT解决这个技术问题 Extra ChatGPT

警告:未受保护的私钥文件!尝试通过 SSH 连接到 Amazon EC2 实例时

我正在努力在 Amazon EC2 实例上设置 Panda。我昨晚设置了我的帐户和工具,使用 SSH 与我自己的个人实例交互没有问题,但现在我没有被允许进入 Panda 的 EC2 实例的权限。 Getting Started with Panda

我收到以下错误:

@         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 应该只需要一个密钥对名称,这是亚马逊方面的东西。当你 SSH 进入时,你只应该使用你的实际私钥(磁盘上的那个)。你从 ec2-run-instances 得到什么错误?
这个问题的标题很糟糕。
@MikeNereson:随意编辑它,这就是我们在这里让事情变得更好的方式
您确定将其设置为 0600(八进制)而不是 600(十进制)吗?
chmod 400 ~/.ssh/id_rsa参考:stackoverflow.com/a/9270753/2082569

A
Aniket Thakur

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

这就是它应该的方式。

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

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

将目录设置为 700 确实应该足够了,但只要文件为 600,777 就不会受到伤害。

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


我今天刚刚遇到一种情况,我希望密钥文件是组可读的(使用 ssh 不是用于个人登录,而是在远程服务器上执行脚本,为此目的在远程服务器上使用专用用户,因此仅锁定了授权密钥所述脚本将运行,并且源服务器上的多个人应该有权运行该脚本)。哦,好吧,我想简单的解决方法是为所有应该有权访问的用户将副本放入 ~/.ssh/ - 或使用所有个人密钥填充 authorized_keys。
@tobixen:两年后,但是......“正确”的解决方法是将密钥放在专用用户中,并允许组用户 sudo 访问以专用用户身份运行该命令。
@StuThompson 指向 EC2 文档的链接似乎已失效。请问可以更新吗?
我看不出我应该做什么才能使它在您的答案中起作用,请提供答案:)
@Pratik 为密钥文件设置 600 和为目录设置 777 应该可以工作。
M
Mohsen

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

chmod 700 ~/.ec2

您想对文件拥有执行权限的任何特殊原因?
@Zoltán 这是一个目录,而不是文件。
我只是在 .pem 文件上使用了它,它对我有用。
G
General Grievance

为了解决这个问题,

您需要将权限重置为默认值: sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub 如果您收到另一个错误:您确定要继续连接(是/不)?是 未能将主机添加到已知主机列表 (/home/geek/.ssh/known_hosts)。这意味着该文件的权限也设置不正确,可以使用以下命令进行调整:sudo chmod 644 ~/.ssh/known_hosts

最后,您可能还需要调整目录权限:sudo chmod 755 ~/.ssh

这应该可以让您重新启动并运行。


s
spencer.sm

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

为 .ssh 文件夹设置 700 权限

chmod 700 .ssh

设置私钥文件600权限

chmod 600 .ssh/id_rsa

为公钥文件设置 644 权限

chmod 644 .ssh/id_rsa.pub

A
ANAND SONI

我也遇到了同样的问题,但我通过将密钥文件权限更改为 600 来解决它。

sudo chmod 600 /path/to/my/key.pem


这解决了我的问题
G
Greenkraftz

使用 chmod 命令更改文件权限

sudo chmod 700 keyfile.pem

请在必要时使用 sudo。
D
Dheeraj

在 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 目录中无效。
感谢@PauloMerson 成功了!
J
Jabari

将您的私钥、公钥、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 连接到您的服务器,只需键入 ssh your.server(或您在“主机”之后放置的任何名称)。


D
Dharman

简而言之,pem 文件权限对机器上的每个用户都是开放的,即任何人都可以读取和写入该文件在 Windows 上,我发现使用 git bash 的方式很难执行 chmod。我已按照以下步骤操作

删除用户权限 chmod ugo-rwx abc.pem 仅为该用户添加权限 chmod u+rw run chmod 400 chmod 400 abc.pem

4.现在为您的实例尝试 ssh -i


真的帮助了我你的答案当我使用 Windows 时,我被卡住了。然后我检查了您的答案并使用 Git Bash 更改 .pem 文件权限。非常感谢
A
Abdel Hegazi

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

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

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


L
Luc

解决方案是使其只能由文件的所有者读取,即八进制模式表示的最后两位应为零(例如模式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;
}

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


K
Kubie

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

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

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

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

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