SSH "权限太开放"

3082

我从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文件什么权限?


89
谢谢您的提问。对于编写此错误信息的人来说,更好的体验是建议一些有效的配置(例如下面建议的600或400)。编程人员如果没有编写足够完整且有帮助的错误消息,那么已经折磨我们多年了! - George Pligoropoulos
我的操作系统显示“需要”而不是“建议”。可能是因为我的操作系统更新(2020年)。 - Timo
也适用于其他设置,例如“权限为640的文件太开放”以及其他操作系统,如UnixLinux - Cadoiz
1
很遗憾,该问题无法再进行编辑。它告诉我“请提供一个总结你问题的标题。需要帮助,请查看:如何提出一个好问题?” - 我想在这里分享并建议。 - i_want_more_edits
移除其他人和组的读取权限:chmod go-r id_rsag代表groupo代表othersr表示read。不再出现奇怪的代码,意义才是王道。 - AlikElzin-kilaka
显示剩余2条评论
36个回答

24

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

chmod 400 /Users/username/.ssh/id_rsa

输入图像描述


19

在密钥上,0x00 权限要求有一个例外。如果该密钥归属于 root 并且所属组有用户,则可以将其设置为 0440,那个组中的任何用户都可以使用该密钥。

我认为这适用于集合 0xx0 中的任何权限,但我没有测试每个版本的所有组合。我在 CentOS 6 上使用 5.3p1-84 版本尝试了 0660,并且组不是用户的主组而是次要组,它可以正常工作。

通常不会为个人密钥执行此操作,而是针对用于自动化的密钥,在您不希望应用程序能够干扰密钥的情况下使用。

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


18
仅适用于Windows用户。 前往文件属性-->安全-->高级。
1.禁用继承属性。 2.将继承权限转换为显式权限。 3.移除除管理员之外的所有权限条目。 输入图像描述 输入图像描述

15

这是对我有效的方法(在 Mac 上)

sudo chmod 600 path_to_your_key.pem 
那么:
ssh -i path_to_your_key user@server_ip

希望它能帮助


9

如果您正在 Windows 上使用 WSL

最简单的答案是只需键入:sudo ssh -i keyfile.pem <user>@ip

不要更改文件权限。 这发生的原因? 另一个资源

您不能使用 Bash on Ubuntu on Windows 上的 chmod 修改 Windows 文件系统上的文件权限。您需要将私钥复制到 WSL 主目录(~),然后在那里处理。


另一方面,ssh 不应与 sudo 一起使用。使用 sudo 的原因是它现在可能正在以 root 执行,这不是正确的方法,也是巨大的安全风险,因为允许除 600/400 权限之外的任何权限都会破坏使用 SSH 密钥的目的,从而危及密钥的安全。

最好的方法是将文件复制到 $HOME/.ssh

cp keyfile.pem ~/.ssh

然后对其执行 sudo chmod 400 keyfile.pem

最后执行 ssh -i keyfile.pem <user>@ip


在Windows 10的WSL上,Bingo!从WSL Linux上给Windows文件加chmod是很好的尝试,但显然仍然存在一些问题,并且随着时间推移可能会有变化。将.pem私钥移动到Linux上,在那里运行SSH是完全合理的,而且它起作用 - 而且不需要进行任何chmod或chgrp。谢谢(呼~顺便说一下!)。 - TickboxPhil

9

只需使用以下代码:

sudo chmod 600 [Location of Private Key]/[Name of Private Key]
sudo chmod 700 [Location of Folder Containing Private Key]/[Name of Folder Conataining Private Key]
sudo ssh -v -i key.pem ubuntu@instance.re-region-1.compute.amazonaws.com

7

对于Windows :

奇怪的是,之前在这里描述的UI调整没有帮助我解决问题

但是这个方法解决了该问题:

  1. 以管理员权限打开PowerShell
  2. 进入包含密钥的目录(使用cd命令)
  3. 逐个输入命令

:

$path = ".\{your private key file name}" //for example "myKey"

然后通过输入以下命令来删除您的显式权限:

icacls.exe $path /reset

然后将读取权限分配给当前用户:

icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"

然后移除继承:

icacls.exe $path /inheritance:r

希望能对某些人有所帮助

在此输入图片描述


6

我在从另一台Mac迁移后遇到了同样的问题。 这导致我的密钥无法连接Github。

我按照以下方式重置权限,现在它可以正常工作了。

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

我遇到了同样的错误:'.../...pub' 的权限为 0644 太开放了。 要求您的私钥文件不可被其他人访问。 此私钥将被忽略。 - demokritos

6

我(使用Windows的Ubuntu子系统)看到的错误信息如下:

 Permissions 0555 for 'key.pem' are too open

使用 chmod 400 后,发现使用 root 作为默认用户是原因。

使用以下命令进行更改:

 ubuntu config --default-user your_username

5

我成功尝试过的方法:

将文件夹所属群组改为“Users”

将文件夹权限设置为600


chgrp:无效的组:“Users” - user1418225
我尝试了但一直报错“无效的组`:Users'”,为什么?我使用的是Windows 10和PowerShell。 - Jason Goal
@user1418225,“Users”是与语言环境相关的,请尝试在https://dev59.com/BWox5IYBdhLWcg3wVS8J#28647713中查看thehouse的答案。 - questionto42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接