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

这是在窗口上

我有cygwin + git以及msysgit。

安装Msysgit的选项如下:

OpenSSH 从Windows命令提示符中使用Git

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

Windows cmd提示符 Powershell 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

这是使用我的c:\users\ben\文件夹中的.ssh文件夹,这是msysgit使用的文件夹。我怀疑cygwin工作,因为.ssh文件夹位于其他地方,但我不确定为什么

在Git Bash中,我检查权限:

$ ls -l -a ~/.ssh

这给了我:

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

这些许可显然太宽松了。我不知道他们是怎么变成这样的。

我可以试着改变他们……

$ chmod -v -R 600 ~/.ssh

这告诉我:

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-------)

但这似乎没有效果。我还是得到同样的错误

$ ls -l -a ~/.ssh

产生与以前相同的权限。

更新:

我试图修复这些文件的权限在cygwin,和cygwin报告他们的权限正确,gitbash没有: Alt文本http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

关于如何真正修复这些权限,有什么想法吗?


当前回答

在最近遇到这个问题后,这是谷歌的顶级结果之一,我想我将在这里讨论一个简单的工作:http://code.google.com/p/msysgit/issues/detail?id=261#c40

简单地涉及覆盖mysys ssh.exe与你的cygwin ssh.exe

其他回答

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

除非你有理由想要保留私钥/公钥对(id_rsa/id_rsa.pub),或者喜欢用头撞墙,否则我建议你只是重新创建它们并在github上更新你的公钥。

首先创建~/的备份副本。ssh目录中。

输入以下内容,并响应“y”以确定是否要覆盖现有文件。

ssh-keygen -t rsa

将公钥的内容复制到剪贴板。(下面是你在Mac电脑上应该怎么做)。

cat ~/.ssh/id_rsa.pub | pbcopy

去你在github上的账户,并添加这个密钥。

Name: My new public key
Key: <PASTE>

退出您的终端并重新启动一个新终端。

如果您从未为公钥输入过密码,却收到诸如“输入您的密码”之类无意义的错误消息,请考虑使用这种从头开始的技术。正如你在上面看到的,这并不复杂。

从Properties中更改文件权限、禁用继承和运行chmod 400对我来说都不起作用。我的私钥文件权限是:

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

然后我注意到这个小组没有人,所以我就跑了

chown alex:Administrators ~/.ssh/id_rsa

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

我的系统有点混乱的bash/cygwin/git/msysgit/也许-更多…

Chmod对密钥或配置文件没有影响。

然后我决定从Windows操作系统入手,这是可行的。

Right-Click the file whose permission needs fixing. Select Properties. Select the Security tab. Click Advanced near the bottom. Click Change, next to Owner near the top. Type "My-Awesome-Username" (obviously change that to your current Windows username), and click Check Names, then OK. Under Permission entries:, highlight each user that isn't "My-Awesome-Username", and select Remove. Repeat this until "My-Awesome-Username" is the only one left. Select "My-Awesome-Username", and click Edit below. Make sure the Type: at the top is set to Allow, and then tick the checkbox next to Full control. Hit OK, Apply, OK, OK. Give it another try now...

似乎有时候mock-bash不能控制文件的所有权。它特别奇怪,因为它是从模拟bash脚本生成的。图。

我最近在使用Windows XP时也遇到了同样的问题。我尝试在我的~/上chmod 700。Ssh /id_rsa文件,但它似乎没有工作。当我使用ls -l查看权限时~/。我可以看到我的有效权限仍然是644。

然后我想起来了,windows权限也继承了文件夹的权限,而且这个文件夹仍然对所有人开放。一种解决方案可能是为文件夹设置权限,但我认为更好的方法是告诉系统忽略该文件的继承。这可以使用文件属性中的security选项卡上的高级选项来完成,并取消选中“inherit from parent permissions…”

这可能对其他有同样问题的人有帮助。