ssh“权限太开放”错误


2052

我的Mac出现问题,无法再在磁盘上保存任何类型的文件。我必须重新启动OSX Lion并重置文件和ACL的权限。

但是现在当我要提交存储库时,我从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文件什么权限级别?


19
感谢您询问问题。对于编写此错误消息的人来说,建议一些有效的配置(例如下面建议的600或400)会是更好的体验。程序员没有编写足够有用的错误消息,多年来一直困扰着我们所有人!
George Pligoropoulos

FWIW,这与在手册StrictModes上在sshd服务器上启用有关:“ StrictModes指定sshd(8)在接受登录之前是否应检查文件模式以及用户文件和主目录的所有权。” -您可以禁用此功能,但不建议这样做。
masseyb

Answers:


3465

密钥仅可由您读取:

chmod 400 ~/.ssh/id_rsa

如果您需要密钥可读写:

chmod 600 ~/.ssh/id_rsa

600似乎也不错(实际上,在大多数情况下更好,因为您以后无需更改文件权限即可对其进行编辑)。

联机帮助页(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.

299
400太低,因为它使您自己的用户无法写。实际上建议使用600,因为它允许所有者读写,而不仅仅是读取。
jfreak53

8
我发现今天有时候与400相关。假设您有一个具有no-pty等功能集的authorized_keys文件。如果该文件是可写的,则用户实际上可以覆盖authorized_keys文件并获得交互式外壳程序访问!要记住的一点,尽管对于大多数人来说肯定不是一般情况。
quickshiftin

17
AWS实际上建议在其网站上授予权限400。那就是我在OS X上所做的,并且有效。
乔治·米洛纳斯

5
这肯定有效并且更安全。唯一的缺点是您必须将其更改为600才能进行编辑。对于id_rsa和id_rsa.pub,我怀疑这很重要,因为您很少编辑这些文件,但是对于authorized_keys来说,这可能很烦人。最好了解权衡并适当配置每个系统。
quickshiftin

3
我想这还取决于您编辑它们的频率。许多人设置了它,却忘记了它,因此400可以免受他人和您自己的行为的侵害;必要时修改为600。如果这是您的工作流程和ssh-savy的一部分,那么继续更改权限可能会更大。
vol7ron

99

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

chgrp用户〜/ .ssh / id_rsa

然后可以应用此处发布的解决方案,可以选择400或600。

chmod 600〜/ .ssh / id_rsa

参考:http : //vineetgupta.com/blog/cygwin-permissions-bug-on-windows-8


8
取决于语言环境。我必须运行“ chgrp U〜ytkownicy〜/ .ssh / id_rsa”,因为“用户”没有错误的此类组。
Marcos 2014年

我也必须这样做。我的cygwin目录位于默认位置(C:\cygwin64),因此它可能继承了权限。奇怪的是,这在我拥有的其他笔记本电脑上没有发生。
Zach Thacker 2014年

3
@Marcos我添加了一个不受区域限制影响的答案:stackoverflow.com/a/28647713/67013
thehouse 2015年

4
Windows10。仅使用第二个命令。像魅力一样工作。
StalkAlex

请注意,对于使用其他语言的安装,“用户”组具有其他标识符。
John Rumpel

43

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

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

GID 545是一个特殊的ID,即使您的语言环境对Users使用不同的单词,它也始终引用“用户”组。



24

AFAIK的值为:

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

密钥文件“ id_rsa”为600


19

我的Windows 10中出现错误,因此我将权限设置为以下内容,并且该方法可以正常工作。

Windows 10的id_rsa的权限

详细信息,删除其他用户/组,直到只有“ SYSTEM”和“ Administrators”为止。然后将Windows登录名添加为仅具有“读取”权限。

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


我在Win-10上有同样的问题。根据您的解释,不清楚您实际允许和拒绝的内容-我将“用户”和“已认证用户”而非“特定用户”作为选项+系统和管理员。此外,我无法弄清cygwin-要安装还是使用。(?)
Sam-T

2
对于Win10,需要将密钥移到用户的家中 -这非常有效。我试图提供完整的密钥路径并弄乱权限-没有任何效果。
Sam-T

@ Sam-T如果您在列表中看不到您的名字,则可以按Edit...进行添加,然后按,Add...然后在文本框中键入您的名字,"Enter the object names to select"然后按Check Names按钮(并按OKOK),然后您的名字应列在Security选项卡中
Supawat Pusavanno

我可能可以根据您的说明专门添加名称。但是我的主要问题是- 拒绝和允许所有人的确切权限什么。同时提到,我能够通过简单地将解决问题.pemmyuser directory
山姆-T

15

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

我相信这可以在“ 0xx0”集中的任何权限下使用,但我尚未测试每个版本的每种组合。我在CentOS 6上尝试使用5.3p1-84进行0660,该组不是用户的主要组,而是次要组,并且工作正常。

在您不希望应用程序弄乱密钥的情况下,通常不会对某人的个人密钥执行此操作,而是对用于自动化的密钥执行此操作。

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



11

在Windows 10上,cygwin的chmod和chgrp对我来说还不够。我必须右键单击文件->属性->安全性(选项卡),然后删除除活动用户外的所有用户和组。


这只是有效的解决方案:)谢谢您节省了我的时间
Atul,

我发现执行此操作后,我也可以从正常的Windows命令提示符下执行ssh。无需使用Cygwin。大!
Atul

8

这就是为我工作的东西(在Mac上)

sudo chmod 600 path_to_your_key.pem 

然后 :

ssh -i path_to_your_key user@server_ip

希望对你有帮助



4

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

我按如下所示重置了权限,并且现在可以正常使用了。

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

4

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

我遇到这个问题,试图使用来自AWS的.pem文件ssh进入Ubuntu EC2实例。

在Windows中,当我将此密钥放入.ssh文件夹下的created中时,此方法有效

C:\Users\USERNAME\.ssh\private_key

在Windows 10中更改权限设置:

文件设置>安全性>高级

禁用继承

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

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

然后可以安全连接。


4

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

 Permissions 0555 for 'key.pem' are too open

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

使用cmd更改此设置:

 ubuntu config --default-user your_username

3

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

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

cd ~/.ssh
chmod 400 id_rsa

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


1

在与Ansible玩耍时遇到了这个错误。为了解决此问题,我将私钥的权限更改为600。而且有效!

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

1

我为私钥尝试了600级权限,它对我有用。 chmod 600 privateKey [dev] $ ssh -i privateKey user @ ip正常工作

chmod 755 privateKey [dev] $ ssh -i privateKey user @ ip出现 以下问题:'privateKey'的权限0755太开放了。要求他人不能访问您的私钥文件。此私钥将被忽略。加载密钥“ privateKey”:权限错误


0
I have got the similar issue when i was trying to login to remote ftp server using public keys..        
To solve this issue initially i have done the following process
    首先找到公共密钥的位置,因为当您尝试使用此公共密钥登录ftp时。首先,我们需要创建一个密钥,并将其设置为600。
            确保您在正确的位置。
            步骤1:
            去正确的位置
            第2步:
            在正确的位置之后
 命令: 
     chmod 600 id_rsa

        This has solved my issue.


-2

对于Win10,需要将您的密钥移动到linuxlike os用户的主目录中,您需要将chmod更改为700 like或600 etc.


对于Win10,需要将密钥移到用户的家中 -这非常有效。我试图提供完整的密钥路径并弄乱权限-无法正常工作。
Sam-T
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.