最近我一直无法克隆或推送到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

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


当前回答

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

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

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

其他回答

对我来说,诀窍是用:"tty nodosfilewarning"更新CYGWIN环境变量。甚至不需要修改密钥。

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

cd ~/.ssh
chmod 700 id_rsa

在.ssh文件夹中。这将只对所有者(您)将id_rsa文件设置为rwx(读、写、执行),而对其他所有人都没有访问权。

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

如果这不起作用,我会尝试卸载msysgit,删除计算机上的所有.ssh文件夹(只是为了安全起见),然后重新安装msysgit,并尝试完全重新开始(尽管我认为你告诉我你已经尝试过了)。

编辑:也刚刚发现这个链接通过谷歌-修复“警告:未保护的私钥文件!”在Linux上虽然它是针对Linux,它可能有帮助,因为我们正在谈论Linux权限等。

我从来没有设法让git完全在Powershell中工作。但是在git bash shell中,我没有任何权限相关的问题,我也不需要设置chmod等…在将ssh添加到Github后,我就开始运行了。

好了,下面就是我如何在Win7上强制更改Windows文件的权限本身: 在windows资源管理器中找到ssh密钥: C: \ [your_user_name_here] . ssh \ id_rsa用户

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

现在删除所有不是你用户名的用户。这包括管理员和系统用户。在这一点上,你可能会看到一个关于继承权限的对话-选择DOESN'T inherit选项-因为我们只想更改这个文件。

单击OK并保存直到完成。

我为此斗争了好几天,因为我的窗口不会从命令行更改文件权限。这样做也是真实的——而不是使用令人兴奋的工作,使可能产生奇怪的后果。

我在Windows 10上也遇到了同样的问题,我试图SSH进入一个Vagrant盒子。这似乎是旧OpenSSH版本中的一个bug。对我有用的是:

从http://www.mls-software.com/opensshd.html安装最新的OpenSSH where.exe ssh

(如果使用Powershell,请注意“。exe”)

你可能会看到如下内容:

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\OpenSSH\bin\ssh.exe
C:\opscode\chefdk\embedded\git\usr\bin\ssh.exe

注意,在上面的示例中,最新的OpenSSH位于路径的第二个位置,因此不会执行。

更改顺序:

右键单击Windows按钮->设置->“编辑系统环境变量” 在“高级”选项卡上单击“环境变量…” 在“系统变量”下编辑“路径”。 选择“C:\Program Files\OpenSSH\bin”并“向上移动”,使其出现在顶部。 单击OK 重新启动控制台,以便应用新的环境变量。