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

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


当前回答

在将我的Cygwin安装升级到2015年2月左右的版本(1.7.34(0.285/5/3)2015-02-04 12:14 x86_64 Cygwin)后,我突然遇到了未保护的私钥文件警告。

我在运行以下命令后修复了这个问题:

setfacl -s u::rw-,g::---,o:--- ~/.ssh/id_rsa

(另一个问题的另一个答案提供了更详细的背景)

其他回答

@科比的答案不适合我,所以我做了一点改变。

cd ~/.ssh
chmod 700 id_rsa.pub

这在我的Mac上运行得很好。

我在XP上,这允许Git Bash与Github通信(在经历了很多挫折后):

拷贝c:\cygwin\bin\cyg*(~50个文件)到c:\Program Files\Git\bin\ 拷贝c:\cygwin\bin\ssh.exe到c:\Program Files\Git\bin\(覆盖) 创建文件c:\Documents and Settings\ <用户名>\。ssh \配置包含: 主机github.com git用户 主机名:github.com PreferredAuthentications publickey IdentityFile "/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa" (可选)使用ssh -v git@github查看已调试的连接。 试试推一下!

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

BUG: mingw32看到的所有文件都是644(其他/组可读),我在mingw32, cygwin或Windows中尝试的任何东西都不能修复它。 mingw32的SSH版本不允许私钥这样(在服务器中这通常是一个很好的策略)。

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

cd ~/.ssh
chmod 700 id_rsa

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

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

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

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

对于*nix系统,明显的修复是chmod 600 id_rsa ofc,但在windows 7上,我不得不把头撞到墙上一段时间,但后来我发现了神奇的解决方案:

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

CYGWIN

基本上,这是git windows二进制使用的mingw32中的一个缺陷,总是看到所有文件644和所有文件夹755。删除环境变量并不会改变这种行为,但它显然会告诉ssh.exe忽略这个问题。如果你确实通过探索者的安全设置对你的id_rsa设置了适当的权限(除了你自己的用户之外,真的不需要有任何其他用户,不是“everyone”,不是“administrators”,不是“system”。一个也没有。只有你),你仍然是安全的。

现在,为什么mingw32(与cygwin不同的系统)会使用cygwin环境变量,这超出了我的理解范围。我看像只虫子。

我通过运行来解决它:

chmod 400 ~/.ssh/id_rsa

我希望能有所帮助。祝你好运。