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个回答

5126

这些键只能由您进行读写:

chmod 600 ~/.ssh/id_rsa

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

chmod 400 ~/.ssh/id_rsa

600 在大多数情况下似乎更好,因为您不需要稍后更改文件权限以进行编辑。(有关更多细微差别,请参见评论部分)

来自 manpage (man ssh) 的相关部分

 ~/.ssh/id_rsa
         Contains the private key for authentication.  These files contain sensitive 
         data and should be readable by the user but not
         accessible by others (read/write/execute).  ssh will simply ignore a private 
         key file if it is              
         accessible by others.  It is possible to specify a
         passphrase when generating the key which will be used to encrypt the sensitive 
         part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_ecdsa.pub
 ~/.ssh/id_rsa.pub
         Contains the public key for authentication.  These files are not sensitive and 
         can (but need not) be readable by anyone.

370
400 的权限过低,这将使你的用户无法进行写操作。实际上建议使用 600 权限,这将允许所有者进行读写,而不仅仅是读取。 - jfreak53
11
今天我发现有时候400权限是很重要的。假设你有一个设置了no-pty等功能的authorized_keys文件,如果该文件具有写入权限,用户实际上可以覆盖authorized_keys文件并获得交互式shell访问权限!需要记住的一点是,尽管这不适用于大多数人。 - quickshiftin
25
AWS在其网站上实际建议使用权限为400。我在OS X上照做了,结果成功了。 - George Mylonas
8
这个方法确实行之有效,而且更加安全。唯一的缺点是你需要将其更改为600才能进行编辑。对于id_rsa和id_rsa.pub文件来说,我认为这并不重要,因为你很少需要编辑这些文件,但对于authorized_keys文件来说,可能会有些麻烦。最好理解权衡并相应地配置每个系统。 - quickshiftin
7
我想这也取决于你编辑它们的频率。许多人设置并忘记,因此400比较安全,可以防止他人和你自己的操作;必要时再修改为600。如果这是你的工作流程,并且你懂得 ssh,那么保持更改权限可能会成为一个阻碍。 - vol7ron
显示剩余13条评论

125

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

chgrp Users ~/.ssh/id_rsa

那么这里发布的解决方案可以应用,400或600都可以。

chmod 600 ~/.ssh/id_rsa

点击此处查看参考资料


9
因为"Users"错误,没有这个组,所以我不得不运行“chgrp Użytkownicy ~/.ssh/id_rsa”来更改本地相关设置。 - Marcos
我也不得不这样做。我的cygwin目录位于默认位置(C:\ cygwin64),因此它可能继承了权限。奇怪的是,在我拥有的其他笔记本电脑上没有发生这种情况。 - Zach Thacker
3
我已经添加了一份通用的答案,不受地域影响:https://dev59.com/BWox5IYBdhLWcg3wVS8J#28647713。 - thehouse
4
Windows 10。只使用了第二个命令。运行得非常好。 - StalkAlex
请注意,对于安装在其他语言环境下的情况,“Users”组可能具有替代标识符。 - John Rumpel
我使用sudo chmod 600 ~/.ssh/id_rsa。然后,运行ssl -L xxxx id_rsa。它会询问我主机'ci-smartface.westeurope.cloudapp.azure.com (13.94.213.109)'的真实性无法确定。 ECDSA密钥指纹为yyyy。您确定要继续连接吗(是/否)?我输入'yes',但仍然存在相同的错误:警告:未受保护的私钥文件! - us2956

82

我在Windows 10中遇到了错误,所以我按照以下步骤设置了权限,然后问题得以解决。

Windows 10下id_rsa的权限

详细来说,删除其他用户/组,直到只剩下'SYSTEM'和'Administrators'。然后将您的Windows登录添加到其中,并仅授予读取权限。

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


我在Win-10上遇到了同样的问题。根据您的解释,不清楚您实际允许和拒绝了什么 - 我只有“用户”和“经过身份验证的用户”,而没有“特定用户”选项,还有系统和管理员。此外,我无法弄清楚cygwin - 是要安装还是使用?(?) - Sam-T
30
对于 Win10,需要将你的密钥移动到用户的主目录下 - 这个方法非常有效。我之前试图给出完整路径和更改权限,但都没有奏效。 - Sam-T
@Sam-T 如果您在列表中看不到自己的名字,可以通过按下“编辑...”然后按下“添加...”来添加,然后在文本框“输入要选择的对象名称”中键入您的姓名,然后按“检查名称”按钮(并按“确定”和另一个“确定”),然后您的姓名应该列在“安全”选项卡中。 - Supawat Pusavanno
2
我可能可以根据您的指示特别添加名称。但我的主要问题是 - 拒绝和允许所有的确切权限。同时,正如我所提到的,我能够通过将.pem添加到myuser目录来解决问题。 - Sam-T
哦,谢谢。在Windows 10上这个完美地运行了,我试了好几周才实现的。 - Lalit Sharma

53

在AWS上,使用Windows 10通过ssh连接Ubuntu EC2时出现“权限过大”错误

我试着使用AWS的.pem文件连接Ubuntu EC2实例时遇到了这个问题。

在Windows中,当我将该密钥放入.ssh文件夹下创建的文件夹中时,它可以正常工作。

C:\Users\USERNAME\.ssh\private_key

更改 Windows 10 权限设置的方法:

文件设置 > 安全性 > 高级

禁用继承

将继承的权限转换为显式权限

删除除管理员外的所有权限条目

然后可以安全连接。


1
那真的很有帮助!谢谢! - guptasaanika
将私钥移动到 .ssh 目录下并设置 chmod 600 对我来说已经足够了。 - LoMaPh

53

在 Windows 8.1 上可行的与语言环境无关的解决方案是:

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

GID 545是一个特殊的ID,即使您的语言环境使用不同的单词表示“Users”组,它仍然指代“Users”组。


44

据我所知,这些值为:

  • 700 用于隐藏目录.ssh,其中包含密钥文件

  • 600 用于密钥文件id_rsa


42

我的设置为0600(而且它能够正常工作)


35

当我试图使用公共密钥登录远程FTP服务器时,遇到了类似的问题。
为解决此问题,我执行了以下步骤:

  • 首先找到公共密钥的位置,因为在尝试登录FTP时会使用该公共密钥。
  • 或者,您可以创建一个新密钥,并将该密钥的权限设置为600
  • 确保您处于正确的位置,并执行此命令:
chmod 600 id_rsa

这适用于MacOS M1。 - Mehmet Aziz Algüllü

28
在Windows 10上,cygwin的chmodchgrp不够用。我必须右键单击文件 -> 属性 -> 安全(选项卡)并删除除了我的活动用户之外的所有用户和组。

3
这是目前唯一运作良好的解决方案 :) 感谢您节省了我的时间。 - Atul
1
我发现,在这样做之后,我也可以从普通的Windows命令提示符中进行ssh。无需使用Cygwin。太棒了! - Atul

28

我用sudo命令取得了成功。

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

1
唯一对我起作用的东西 - Talha Anwar
2
sudo 是所有东西中唯一有效的。 - dumb_coder
2
使用 Windows WSL,这个有效! - West
在Windows 11上对我也有效。谢谢。 - Sagar Ghare
你救了我一命,非常感谢!!! - undefined

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