使用Git GUI或ssh-keygen的SSH私钥权限过于开放

Ben*_*man 243 git ssh cygwin openssh msysgit

最近我一直无法克隆或推送到github,我正试图找到根本原因.

这是在Windows上

我有cygwin + git以及msysgit.

使用以下选项安装Msysgit:

  • OpenSSH的
  • 从Windows命令提示符使用Git

这给了我4个环境来尝试使用git:

  • Windows cmd提示符
  • 电源外壳
  • Git Bash
  • Cygwin的

不知何故,我设法让自己进入一个位置,当我尝试使用msysgit,cmd.exe或Powershell克隆存储库时,我收到以下错误:

> Initialized empty Git repository in
> C:/sandbox/SomeProject/.git/
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @    WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions 0644 for
> '/c/Users/Ben/.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. bad permissions: ignore key:
> /c/Users/Ben/.ssh/id_rsa Permission
> denied (publickey). fatal: The remote
> end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

这是在我的c:\ users\ben \文件夹中使用.ssh文件夹,这是msysgit使用的文件夹.我怀疑cygwin是可行的,因为.ssh文件夹位于其他地方,但我不知道为什么

在Git Bash中,我检查权限:

$ ls -l -a ~/.ssh
Run Code Online (Sandbox Code Playgroud)

这给了我:

drwxr-xr-x    2 Ben      Administ        0 Oct 12 13:09 .    
drwxr-xr-x   34 Ben      Administ     8192 Oct 12 13:15 ..    
-rw-r--r--    1 Ben      Administ     1743 Oct 12 12:36 id_rsa
-rw-r--r--    1 Ben      Administ      399 Oct 12 12:36 id_rsa.pub    
-rw-r--r--    1 Ben      Administ      407 Oct 12 13:09 known_hosts
Run Code Online (Sandbox Code Playgroud)

这些权限显然太宽松了.他们是如何得到这种方式的,我不知道.

我可以尝试改变它们......

$ chmod -v -R 600 ~/.ssh
Run Code Online (Sandbox Code Playgroud)

告诉我:

mode of `.ssh' changed to 0600 (rw-------)
mode of `.ssh/id_rsa' changed to 0600 (rw-------)
mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------)
mode of `.ssh/known_hosts' changed to 0600 (rw-------)
Run Code Online (Sandbox Code Playgroud)

但似乎没有效果.我仍然得到同样的错误,并做

$ ls -l -a ~/.ssh
Run Code Online (Sandbox Code Playgroud)

产生与以前相同的权限.

更新:

我试着把cygwin的权限,以这些文件和Cygwin正确报告他们的权限,gitbash并不: 替代文字http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

关于如何真正修复这些权限的任何想法?

Kob*_*oby 358

你改变了整个目录的权限,我同意Splash是一个坏主意.如果你能记住目录的原始权限是什么,我会尝试将它们设置回原来的权限,然后执行以下操作

cd ~/.ssh
chmod 700 id_rsa
Run Code Online (Sandbox Code Playgroud)

在.ssh文件夹中.这将仅为所有者(您)将id_rsa文件设置为rwx(读取,写入,执行),并为其他所有人设置零访问.

如果您不记得原始设置是什么,请添加新用户并为该用户创建一组SSH密钥,从而创建一个具有默认权限的新.ssh文件夹.您可以使用新的.ssh文件夹作为重置.ssh文件夹和文件的权限的参考.

如果这不起作用,我会尝试卸载msysgit,删除计算机上的所有.ssh文件夹(仅用于安全措施),然后用您想要的设置重新安装msysgit并尝试重新开始(尽管我认为你告诉我你已经尝试过这个了.

编辑:也刚刚通过谷歌找到这个链接 - 修复"警告:不受保护的私人密钥文件!" 在Linux上虽然它的目标是Linux,但它可能会有所帮助,因为我们正在谈论liunx权限等.

  • @Koby nope,这是一个工作aroudn的错误...需要使用chgrp -R用户〜/ .ssh然后chmod现在正在工作并且实际上正确地更改了权限.....我最终发现的一个已知错误另一篇文章. (5认同)
  • 这个答案特别适用于使用cygwin或msysgit(因为msysgit使用cygwin或mingw32的子集).问题是文件的权限.Git喜欢(主要)使用linux权限(可能是它的目标受众的副产品).使用Winodws shell中的git.exe已知存在问题,我建议坚持使用msysgit.至少在GitSharp完全正常工作之前. (2认同)
  • 这不适用于Windows 8和我在2014年1月14日安装的cygwin,因为在chmod 700之后,它将文件显示为rwxrwx ---.组权限设置为我设置用户权限的任何内容,我不能使用我的密钥. (2认同)
  • 我可以验证GitBash for Windows中存在某种错误,其中无法使用chmod设置正确的权限,或者未正确读取权限.chmod 600 id_rsd; ls -l id_rs - > -rwx-r - r-- (2认同)

kit*_*kun 74

cygwin的chmod有一个bug,请参考:

https://superuser.com/questions/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected

chgrp -Rv Users ~/.ssh/* 
chmod -vR 600 ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

  • 这是实际的正确答案.被选为正确答案的人 - 我认为投票的人是linux用户,并没有意识到他正在正确地执行命令.我今天和cygwin有同样的问题.谢谢! (3认同)

Tun*_*ğlu 17

对于*nix系统,明显的解决方法是chmod 600 id_rsaofc,但是在Windows 7上我不得不将头撞到墙上一段时间,但后来我找到了神奇的解决方案:

转到我的电脑/右键单击/属性/高级系统设置/环境变量并删除变量(可能来自系统和用户环境):

CYGWIN

基本上,它是git windows binary使用的mingw32中的一个缺陷,看到所有文件644和所有文件夹755总是如此.删除环境变量不会改变该行为,但它似乎告诉ssh.exe忽略该问题.如果通过探险安全设置中设置适当的权限,您id_rsa(实在没有必要有任何其他用户那里不是你自己,而不是"人人",而不是"管理员",而不是"系统"没有.只是你) ,你仍然是安全的.

现在,为什么mingw32的,不同的系统的cygwin,将使任何使用Cygwin环境变量的,我是无法理解.对我来说看起来像个错误.

  • 这不适合我.我仍然收到"UNPROTECTED PRIVATE KEY FILE"消息.只是想让你知道,以防其他人遇到类似结果的这个帖子. (3认同)

Ste*_*lay 13

我正在使用XP,这允许Git Bash与Github沟通(经过很多挫折):

  1. 复制c:\cygwin\bin\cyg*(~50个文件)到c:\Program Files\Git\bin\
  2. 复制c:\cygwin\bin\ssh.exec:\Program Files\Git\bin\(覆盖)
  3. 创建c:\Documents and Settings\<username>\.ssh\config包含的文件:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile "/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa"
    
    Run Code Online (Sandbox Code Playgroud)
  4. (可选)ssh -v git@github用于查看已调试的连接.

  5. 试试推!

背景:一般问题是这两者的结合:

  • BUG:mingw32将所有文件视为644(其他/组可读),我在mingw32,cygwin或Windows中尝试的任何内容都无法修复它.
  • mingw32的SSH版本不允许使用私钥(通常是服务器中的一个好策略).


Bre*_*ngs 10

对于使用此处找到的Git的Windows 7 (它使用MinGW,而不是Cygwin):

  1. 在Windows资源管理器中,右键单击id_rsa文件,然后选择"属性"
  2. 选择Security选项卡,然后单击Edit ...
  3. 检查所有组的完全控制旁边的拒绝框除了管理员
  4. 重试您的Git命令


ale*_*x.m 6

从属性更改文件权限,禁用继承和运行chmod 400对我来说不起作用.我的私钥文件的权限是:

-r - r ----- 1 alex无1766 3月8日13:04 /home/alex/.ssh/id_rsa

然后我注意到这个组是None,所以我就跑了

chown alex:管理员〜/ .ssh/id_rsa

然后我可以使用chmod 400成功更改权限,并运行git push.


小智 5

好的,所以这是我实际上如何在Windows文件上强制更改有关Win7本身的权限的方法:在Windows资源管理器中找到您的ssh密钥:C:\ Users [您的用户名_此处] .ssh \ id_rsa

右键单击文件>属性>安全性选项卡>高级按钮>更改权限

现在删除实际上不是您的用户名的所有人。这包括管理员和系统用户。此时,您可能会遇到有关继承权限的对话-选择不继承的选项-因为我们只想更改此文件。

单击确定并保存直到完成。

我为此战斗了几天,因为我的Windows不会从命令行更改文件权限。这样,它实际上也可以完成-而不是使用令人发指的变通办法。