最近我一直无法克隆或推送到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 ssh.exe和所有cyg*.dll复制到Git的bin目录(这可能不是必要的,但这是我采取的步骤,但这本身并没有解决问题) 按照以下步骤操作:http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/ 我添加了一些细节到我的~/。ssh /配置文件:

主机heroku.com 主机名:heroku.com 端口22 IdentitiesOnly是的 IdentityFile ~ / . ssh / id_heroku TCPKeepAlive是的 用户布兰登

我必须使用用户作为我的电子邮件地址heroku.com 注意:这意味着你需要创建一个密钥,我按照这个来创建密钥,当它提示输入密钥的名称时,一定要指定id_heroku http://help.github.com/win-set-up-git/

然后添加键: Heroku键:添加~/.ssh/id_heroku.pub

其他回答

我在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 重新启动控制台,以便应用新的环境变量。

我在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版本不允许私钥这样(在服务器中这通常是一个很好的策略)。

这在Windows上是一个特别复杂的问题,仅仅正确地chmod文件是不够的。你必须设置好你的环境。

在Windows上,这对我来说很管用:

安装cygwin。 将msysgit ssh.exe替换为cygwin的ssh.exe。 使用cygwin bash, chmod 600私钥文件,对我来说是“id_rsa”。 如果仍然无效,进入“控制面板->系统属性->高级->环境变量”,添加如下环境变量。然后重复步骤3。 变量值 CYGWIN sbmntsec

从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。

你从另一台机器复制了密钥文件吗?

我只是在客户端机器上创建了一个id_rsa文件,然后将我想要的密钥粘贴进去。没有权限问题。没有东西可以凝固。它就是管用。如果使用PuTTYgen创建私钥,它也可以工作。

如果你从另一台机器上复制,可能是隐藏的群组问题。

在两台Windows 8.1机器上进行了测试。使用Sublime Text 3复制并粘贴私钥。使用Git Bash (Git-1.9.4-preview20140611)。