ssh “permissions are too open” error
我的Mac有问题,我不能再在磁盘上保存任何类型的文件。我必须重新启动osx lion并重置文件和ACL的权限。
但是现在,当我想要提交一个存储库时,我从ssh中得到了以下错误:
1 2 3 | 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文件授予哪些权限级别?
密钥只能由您读取:
1 | chmod 400 ~/.ssh/id_rsa |
600看起来也不错(事实上在大多数情况下更好,因为您不需要更改文件权限来编辑它)。
手册页的相关部分(
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 ~/.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.
在Windows8.1中使用cygwin,需要运行一个命令:
chgrp Users ~/.ssh/id_rsa
然后,这里发布的解决方案可以应用,400或600可以。
chmod 600 ~/.ssh/id_rsa
参考:http://vinetgupta.com/blog/cygwin-permissions-bug-on-windows-8
在Windows8.1上工作的与区域设置无关的解决方案是:
1 2 | chgrp 545 ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa |
gid 545是一个特殊的ID,它总是引用"用户"组,即使您的区域设置对用户使用不同的词。
0600是我的设定值(它在工作)
afaik值为:
700表示密钥文件所在的隐藏目录".ssh"
600表示密钥文件"id_rsa"
键的"0x00"权限要求有一个例外。如果密钥由根拥有,并且由包含用户的组拥有,那么它可以是"0440",并且该组中的任何用户都可以使用该密钥。
我相信这将与"0xX0"集中的任何权限一起工作,但我还没有测试每个版本的每个组合。我在Centos6上用5.3p1-84尝试了0660,这个组不是用户的主要组,而是一个次要组,它工作得很好。
这通常不是针对某人的个人密钥,而是针对用于自动化的密钥,在您不希望应用程序能够处理该密钥的情况下。
类似的规则也适用于.ssh目录限制。
提供400个许可,执行以下命令
1 | chmod 400 /Users/username/.ssh/id_rsa |
什么对我有用
chgrp Users FOLDER
chmod 600 FOLDER
在Windows10上,Cygwin的chmod和chgrp对我来说还不够。我必须右键单击文件->属性->安全性(选项卡),然后删除除活动用户之外的所有用户和组。
我的Windows10中有错误,所以我将权限设置为以下内容,它可以正常工作。
在详细信息中,删除其他用户/组,直到它只有"system"和"administrators"。然后用只读权限将您的Windows登录名添加到其中。
注:
这里有有趣的信息。如果您的私钥太开放,那么操作系统足够智能,可以拒绝远程连接。它了解ID_rsa的权限完全开放的风险(读取,任何人都可以编辑)。
有人可能先把你的锁换了,然后用他已经有的钥匙打开。}
1 2 | cd ~/.ssh chmod 400 id_rsa |
PS:
在处理多个服务器(非生产服务器)时,我们大多数人认为需要将远程服务器与ssh连接起来。一个好主意是有一个应用程序级代码(可以使用JSCH的Java)来在服务器之间创建SSH信任。这样的连接将是无密码的。如果安装了Perl,也可以使用net ssh模块。
对于我(使用用于Linux的Ubuntu子系统),错误消息更改为:
1 | Permissions 0555 for 'key.pem' are too open |
使用chmod 400后。原来,使用根作为默认用户是原因。
使用命令更改:
1 | ubuntu config --default-user your_username |
这就是我(在Mac上)的工作原理。
1 | sudo chmod 600 path_to_your_key.pem |
然后:
1 | ssh -i path_to_your_key user@server_ip |
希望有帮助
我为我的私钥尝试了600级的许可,它对我很有用。chmod 600专用钥匙[开发]$ssh-i privatekey user@ip工作
chmod 755私钥[开发]$ssh-i privatekey user@ip它给出了以下问题:"privatekey"的权限0755太开放。要求其他人无法访问您的私钥文件。此私钥将被忽略。加载键"privatekey":权限错误
我在玩Ansible的时候遇到了这个错误。为了解决这个问题,我已将私钥的权限更改为600。效果不错!
1 | chmod 600 .vagrant/machines/default/virtualbox/private_key |
我正在EC2上使用vpc,并收到相同的错误消息。我注意到我正在使用公共DNS。我把它改成了私人域名系统和沃拉!它奏效了…
对于Win10,需要将密钥移动到用户的home dir对于Linuxlike OS,您需要将chmod设置为700 like或600等。