ChatGPT解决这个技术问题 Extra ChatGPT

ssh“权限太开放”错误

我从 ssh 收到以下错误:

Permissions 0777 for '/Users/username/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

我应该给 id_rsa 文件什么权限?

感谢您提出问题。对于编写此错误消息的人来说,更好的体验是建议一些有效的配置(例如下面建议的 600 或 400)。没有编写足够完整的有用错误消息的程序员多年来一直在折磨我们所有人!
FWIW,这与在 sshd 服务器上启用 StrictModes 有关,来自 man 页面:“StrictModes 指定 sshd(8) 是否应在接受登录之前检查文件模式和用户文件和主目录的所有权。 " - 您可以禁用此功能,但不建议这样做。
我的操作系统显示 It is required 而不是 It is recommended。也许我的操作系统更新(2020 年),这就是原因。
也适用于其他设置,例如 Permissions 640 ... are too open 和其他操作系统,例如 Unix 以及 Linux
不幸的是,这个问题不能再编辑了。 Title cannot contain "ssh "permissions are too open" error" 它告诉我“请提供一个概括您问题的标题。如需帮助,请参阅:How do I ask a good question?”——我想在此提出建议并立即分享。

Z
Zain Rizvi

密钥只能由您读写:

chmod 600 ~/.ssh/id_rsa

或者,密钥只能由您读取(这也会阻止您的写访问):

chmod 400 ~/.ssh/id_rsa

600 在大多数情况下似乎更好,因为您以后无需更改文件权限即可对其进行编辑。 (有关更多细微差别,请参阅评论)

手册页中的相关部分 (man ssh)

~/.ssh/id_rsa 包含用于身份验证的私钥。这些文件包含敏感数据,用户应该可以读取,但其他人不能访问(读/写/执行)。如果其他人可以访问,ssh 将简单地忽略私钥文件。在生成将用于使用 3DES 加密此文件的敏感部分的密钥时,可以指定一个密码短语。 ~/.ssh/identity.pub ~/.ssh/id_dsa.pub ~/.ssh/id_ecdsa.pub ~/.ssh/id_rsa.pub 包含用于认证的公钥。这些文件不敏感,任何人都可以(但不必)读取。


400 太低了,因为这使得您自己的用户无法写入。实际上建议使用 600,因为它允许所有者读写而不仅仅是读取。
我今天发现有时 400 是相关的。假设您有一个包含 no-pty et al 功能集的 authorized_keys 文件。如果文件是可写的,用户实际上可以覆盖authorized_keys 文件并获得交互式shell 访问权限!需要记住的事情,尽管对于大多数人来说肯定不是一般情况。
AWS 实际上在他们的网站上推荐了 400 权限。这就是我在 OS X 上所做的,它奏效了。
这绝对有效并且更安全。唯一的缺点是您必须将其更改为 600 才能进行编辑。对于 id_rsa 和 id_rsa.pub,我怀疑这很重要,因为您很少会编辑这些文件,但对于 authorized_keys,这可能很烦人。最好了解权衡并适当地配置每个系统。
我想这还取决于您编辑它们的频率。许多人设置它并忘记它,因此 400 对他人和您自己的行为会更安全;必要时修改为600。如果它是您的工作流程的一部分并且您精通 ssh,那么它可能会成为不断更改权限的更多障碍。
C
Cadoiz

在 Windows 8.1 中使用 Cygwin,需要运行一个命令:

chgrp Users ~/.ssh/id_rsa

那么这里贴的解决方案就可以应用了,400或者600都可以。

chmod 600 ~/.ssh/id_rsa

Reference here


依赖于语言环境。我不得不运行“chgrp Użytkownicy ~/.ssh/id_rsa”,因为“用户”没有错误地发现这样的组。
我也必须这样做。我的 cygwin 目录位于默认位置 (C:\cygwin64),因此它可能继承了权限。奇怪的是,这在我拥有的其他笔记本电脑上没有发生。
@Marcos 我添加了一个适用于任何语言环境的答案:stackoverflow.com/a/28647713/67013
Windows 10。仅使用第二个命令。像魅力一样工作。
请注意,对于替代语言的安装,“用户”组具有替代标识符。
S
Supawat Pusavanno

我的 Windows 10 出现错误,因此我将权限设置如下,它可以工作。

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

详细地说,删除其他用户/组,直到它只有“系统”和“管理员”。然后将您的 Windows 登录名添加到其中,仅具有读取权限。

请注意,id_rsa 文件位于 c:\users\<username> 文件夹下。


我在 Win-10 上遇到了同样的问题。根据您的解释,不清楚您实际允许和拒绝了什么 - 我有“用户”和“经过身份验证的用户”而不是“特定用户”作为选项 + 系统和管理员。此外,我无法弄清楚 cygwin - 安装或使用。(?)
对于 Win10,需要将您的钥匙移动到用户家中 - 这非常有效。我试图提供完整的密钥路径并弄乱权限 - 没有任何效果。
@Sam-T 如果您在列表中看不到您的姓名,您可以按 Edit... 添加,然后按 Add...,然后在文本框中输入您的姓名 "Enter the object names to select",然后按 Check Names 按钮(然后按 OK 和另一个 OK),那么您的姓名应列在 Security 选项卡中
我可能可以根据您的指示专门添加名称。但我的主要问题是 - 拒绝和允许所有人的确切权限。同时,如上所述,我只需将 .pem 添加到 myuser directory 即可解决问题
哦谢谢。这在 Windows 10 上完美运行,我试图实现这一目标数周。
t
thehouse

适用于 Windows 8.1 的独立于语言环境的解决方案是:

chgrp 545 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

GID 545 是一个始终指代“用户”组的 special ID,即使您的区域设置对用户使用了不同的词。


C
Cadoiz

AFAIK的价值观是:

密钥文件所在的隐藏目录 .ssh 为 700

密钥文件 id_rsa 为 600


D
Devin Ceartas

0600 是我的设置(并且它正在工作)


l
lm5050

AWS 上的 Windows 10 SSH 进入 Ubuntu EC2 “权限太开放”错误

我在尝试使用 AWS 的 .pem 文件 ssh 进入 Ubuntu EC2 实例时遇到了这个问题。

在 Windows 中,当我将此密钥放在 .ssh 文件夹下创建的文件夹中时,这有效

C:\Users\USERNAME\.ssh\private_key

在 Windows 10 中更改权限设置:

文件设置 > 安全 > 高级 禁用继承 将继承的权限转换为显式权限 删除除管理员之外的所有权限条目

然后可以安全地连接。


那真的很有帮助!谢谢!
在 .ssh 下移动私钥对我来说就足够了(和 chmod 600)
i
i_want_more_edits

当我尝试使用公钥登录远程 ftp 服务器时,我遇到了类似的问题。为了解决这个问题,我做了以下过程:

首先找到公钥的位置,因为当你尝试登录 ftp 时,会使用这个公钥。

或者,您可以创建一个密钥并将该密钥的权限设置为 600。

确保您位于正确的位置并执行以下命令:

chmod 600 id_rsa

这适用于 macOS m1
C
Cadoiz

在 Windows 10 上,cygwin 的 chmodchgrp 对我来说还不够。我不得不

右键单击文件

-> 属性

-> 安全(选项卡)

并删除除我的活动用户之外的所有用户和组。


这是唯一有效的解决方案:) 谢谢你节省了我的时间
我发现,在这样做之后,我也可以从普通的 Windows 命令提示符执行 ssh。无需使用 Cygwin。伟大的!
S
Sujit Dhamale

提供400权限,执行以下命令

chmod 400 /Users/username/.ssh/id_rsa

https://i.stack.imgur.com/8Nj3Q.jpg


B
Bazer Con

我通过 sudo 获得了成功

sudo chmod 400 pem-file.pem
sudo ssh -i pem-file.pem username@X.X.X.X

唯一对我有用的东西
sudo 是唯一有效的方法
使用windows wsl,这行得通!
C
Cadoiz

密钥的 0x00 权限要求有一个例外。如果密钥由 root 拥有并且由包含用户的组拥有,则它可以是 0440 并且该组中的任何用户都可以使用该密钥。

我相信这适用于集合 0xx0 中的任何权限,但我还没有测试每个版本的每个组合。我已经在 CentOS 6 上尝试使用 06605.3p1-84,并且该组不是用户的主要组,而是次要组,它工作正常。

这通常不会针对某人的个人密钥,而是针对用于自动化的密钥,在您不希望应用程序能够弄乱密钥的情况下。

类似的规则适用于 .ssh 目录限制。


V
Vasu

仅适用于 Windows 用户。转到文件属性 --> 安全性 --> 高级

禁用继承属性将继承的权限转换为显式权限。删除除管理员之外的所有权限条目。

https://i.stack.imgur.com/yKxxI.jpg


l
lansanalsm

这对我有用(在mac上)

sudo chmod 600 path_to_your_key.pem 

然后 :

ssh -i path_to_your_key user@server_ip

希望有帮助


D
Daniel Kettemann

对我来说(使用适用于 Windows 的 Ubuntu 子系统),错误消息更改为:

 Permissions 0555 for 'key.pem' are too open

使用 chmod 400 之后。事实证明,使用 root 作为默认用户是原因。

使用 cmd 更改此设置:

 ubuntu config --default-user your_username

J
Jerome Ansia

什么对我有用

chgrp 用户文件夹 chmod 600 文件夹


chgrp: grupo inválido: «用户»
我试过了,但一直抛出'无效组':用户'',为什么?使用 Windows 10,PowerShell
@user1418225 'Users' 取决于区域设置,请尝试 stackoverflow.com/a/28647713/11154841 的 thehouse 答案。
V
Vikramaditya Kukreja

从另一台 Mac 迁移后,我遇到了同样的问题。它阻止了我的密钥连接github。

我如下重置权限,现在效果很好。

chmod 700 ~/.ssh     # (drwx------)
cd ~/.ssh            
chmod 644 *.pub      # (-rw-r--r--)
chmod 600 id_rsa     # (-rw-------)

我遇到了同样的错误:Permissions 0644 for '.../...pub' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
M
Mostafa Wael

如果您在 Windows 上使用 WSL

简单的答案就是输入:sudo ssh -i keyfile.pem <user>@ip

无需更改文件权限。 reason 为什么会发生这种情况? Another resource

您无法在 Windows 上的 Ubuntu 上使用 Bash 上的 chmod 修改 Windows 文件系统上文件的权限。您必须将私钥复制到 WSL 主目录 (~) 并在那里执行。

另一方面,sudo 绝不应与 ssh 一起使用。使用 sudo 发出有效的原因是它现在可能以 root 身份执行,这不是执行此操作的正确方法,并且存在巨大的安全风险,因为允许任何其他 600/400 权限违背了使用 SSH 密钥,从而损害密钥的安全性。

执行此操作的最佳方法是将文件复制到 $HOME/.ssh

cp keyfile.pem ~/.ssh

对它做sudo chmod 400 keyfile.pem

然后ssh -i keyfile.pem <user>@ip


W
Whu_Kingsun
700  folder
644  id_rsa.pub

这对我有用。


S
Shivang Agrawal

有趣的消息在这里。如果您的私钥太开放,操作系统足够聪明,可以拒绝远程连接。它了解 id_rsa 权限完全开放(读取,任何人都可以编辑)的风险。

{一个人可以先换你的锁,然后用他已经拥有的钥匙打开它}

cd ~/.ssh
chmod 400 id_rsa

在多台服务器(非生产)上工作时,我们大多数人都觉得需要用 ssh 连接远程服务器。一个好主意是有一段应用程序级代码(可能是使用 jsch 的 java)来在服务器之间创建 ssh 信任。这种方式连接将是无密码的。万一安装了 perl - 也可以使用 net ssh 模块。


B
Bazer Con

我将所有自己的证书和密钥保存在一个目录中,这适用于 PuTTY 等工具,但我从 scp 命令收到此 too open 错误消息。我发现 Windows 已经维护了一个 C:\users\ACCOUNTNAME\.ssh 文件夹,该文件夹具有存储 SSH 密钥的适当访问权限。只要您保留内容备份(Windows 有时会在更新期间将其删除),或者在您的用户文件夹中为 ssh 密钥创建自己的文件夹,这将正常工作,因为只有您和管理员有权访问该父文件夹。

更改 Windows 文件夹的访问权限时要非常小心。我这样做了,并且每天 Windows 会扫描、读取和写入我的 C: 驱动器上的所有文件,这个过程会使计算机减慢几分钟。


B
Bazer Con

正如人们所说,在 Windows 中,我只是将我的 .pem 文件放入 C:\Users\[user]\.ssh\ 并解决了它。尽管您可以从不起作用的 bash 或 powershell 提示符执行 chmod 和其他命令行选项。我没有改变 rsa 或其他任何东西。然后在运行连接时,您必须将 pem 文件的路径放在 .ssh 文件夹中:

ssh -i "C:\Users\[user]\.ssh\ubuntukp01.pem" ubuntu@ec[ipaddress].us-west-2.compute.amazonaws.com

k
karel

我正在使用 Windows 10 并尝试通过 SSH 连接到 EC2 实例。与其使用 Cygwin for Windows,不如尝试使用 Git Bash。为密钥执行 chmod 400 后,我可以通过 SSH 连接到 EC2 实例,但 Cygwin 对我来说同样不起作用。 Windows 将 .pem 文件视为来自 Internet 并阻止它,即使禁用继承也不起作用。

我将文件转换为 .ppk 格式,并且在 PuTTY 中也可以正常工作,但在 Cygwin 中无法正常工作。


在 Cygwin 中使用 ssh 的问题可能是由于 Cygwin 中没有安装 ssh。 Cygwin 中的默认路径包括 ssh 的 Windows 版本,因此如果您在 Cygwin 中键入“ssh ...”,您可能会认为 ssh 命令是(应该使用)Cygwin 的命令。但如果 Cygwin 中未安装 ssh,则键入“ssh ...”会改为调用 Windows 版本。
B
Bazer Con

另一个技巧是在下载文件夹中执行此操作。从 AWS EC2 实例下载私钥后,文件将在此文件夹中,然后只需键入命令

ssh-keygen -y -f myprivateKey.pem > mypublicKey.pub

v
vildhjarta

我在玩 Ansible 时遇到了这个错误。为了解决这个问题,我已将私钥的权限更改为 600。它奏效了!

chmod 600 .vagrant/machines/default/virtualbox/private_key

t
theEpsilon

对于 Windows 10,这是我发现对我有用的:

将您的密钥移动到 Linux 文件系统: mv ~/.ssh /home/{username} 设置该密钥的权限: chmod 700 /home/{username}/.ssh/id_rsa 创建密钥的符号链接: ln - s /home/{用户名}/.ssh ~/.ssh

如果您将主目录 (~) 设置为存储在 Windows 而不是 Linux 中(在 /mnt//home/ 下),则会发生这种情况。


c
coorasse

就我而言,问题是太多的空白。

ssh -i mykey.pem  ubuntu@instace.eu-north-1.compute.amazonaws.com

ssh -i mykey.pem ubuntu@instace.eu-north-1.compute.amazonaws.com

工作正常。问题是空格被作为用户名的一部分。


L
Leena

在连接到 AWS 实例时,我在 Windows 上的 WSL 上遇到了这个问题。我的问题通过切换到经典命令提示符得到解决。您可以尝试切换到不同的终端界面,看看是否有帮助。


B
Bazer Con

我为我的私钥尝试了 600 级别的权限,它对我有用。

chmod 600 privateKey 
[dev]$ ssh -i privateKey user@ip

另一方面,

chmod 755 privateKey 
[dev]$ ssh -i privateKey user@ip

给出了以下问题:

Permissions 0755 for 'privateKey' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "privateKey": bad permissions

H
Henry Ecker

PuTTY 可以在 Windows 10 上完成这项工作。它使用私钥作为输入生成公钥。

下载 PuTTY 安装 PuTTY。安装时出现两个应用程序:putty config、putty key gen 启动 puttyGen 单击加载并选择一个私钥文件。请注意,您需要用 .ppk 扩展名重命名您的私钥文件,例如 private-key.ppk

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


感谢您尝试提供帮助。这是一个非常古老的问题,关于 OSX,而不是 Windows,它已经有一个被接受和高度赞成的答案。