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

最近我一直无法克隆或推送到Github,我试图find根源。

这是在窗户上

我有cygwin + git以及msysgit。

Msysgit安装了以下选项:

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

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

  • Windows cmd提示符
  • 电源shell
  • 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不:

任何想法,我怎么才能真正解决这些权限?

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

 cd ~/.ssh chmod 700 id_rsa 

在.ssh文件夹中。 这将只为所有者(你)设置id_rsa文件为rwx(读,写,执行),而其他人则为零。

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

如果这不起作用,我会尝试做一个卸载msysgit,删除计算机上的所有.ssh文件夹(只是为了安全措施),然后重新安装msysgit与您所需的设置,并尝试彻底重新开始(虽然我想你告诉我你已经试过了)。

编辑:也只是通过谷歌find这个链接 – 修复“警告:未被保护的私人密钥文件!” 在Linux上虽然它针对的是Linux,但可能会有所帮助,因为我们正在谈论liunx权限等。

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 

对于* nix系统,显而易见的修复是chmod 600 id_rsa ofc,但在Windows 7上,我不得不将头撞在墙上一会儿,但是后来我发现了这个神奇的解决scheme:

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

CYGWIN

基本上,它在mingw32中使用的Git Windows二进制文件的缺陷,总是看到所有文件644和所有文件夹755。 除去环境variables并不会改变这种行为,但是它显然告诉ssh.exe忽略这个问题。 如果你通过探索者的安全设置设置适当的权限给你的id_rsa(实际上没有任何其他用户在那里比你自己,而不是“所有人”,而不是“pipe理员”,而不是“系统” ,你仍然是安全的。

现在,为什么与cygwin不同的系统mingw32会使用CYGWIN环境variables,超出了我的想法。 看起来像是一个bug。

我在XP上,这允许Git Bash与Github进行通信(在很多挫败之后):

  1. c:\cygwin\bin\cyg*c:\cygwin\bin\cyg*个文件)复制到c:\Program Files\Git\bin\
  2. c:\cygwin\bin\ssh.exec:\Program Files\Git\bin\ (覆盖)
  3. 创build文件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" 
  4. (可选)使用ssh -v git@github查看debugging的连接。

  5. 试试推!

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

  • BUG:mingw32将所有文件视为644(其他/组可读),而且我在mingw32,cygwin或Windows上都没有试过可以修复它。
  • mingw32的SSH版本不允许使用私钥(通常在服务器上是一个很好的策略)。

对于在这里使用Git的Windows 7(它使用MinGW,而不是Cygwin):

  1. 在Windows资源pipe理器中,右键单击您的id_rsa文件并select属性
  2. select安全选项卡,然后单击编辑…
  3. 检查“完全控制”旁边的“拒绝”框,以查看除pipe理员以外的所有组
  4. 重试你的Git命令

从属性更改文件权限,禁用inheritance和运行chmod 400不适用于我。 我的私钥文件的权限是:

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

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

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

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

对于MAC用户:

通过在terminal中键入以下内容来更改密钥对文件的设置:

 chmod og-r *filename.pem* 

(请确保您正确的目录或正确的path文件名)。

好,所以这里是我如何强制改变我的Windows文件有关权限本身在Win7上:在Windows资源pipe理器中find您的SSH密钥:C:\ Users [your_user_name_here] .ssh \ id_rsa

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

现在删除所有不是您的用户名的人。 这包括pipe理员和系统用户。 在这一点上,你可能会得到关于inheritance权限的对话 – select不inheritance的选项 – 因为我们只想改变这个文件。

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

我为此奋战了好几天,因为我的窗户不会改变命令行的文件权限。 这样做也是实际完成 – 而不是使用令人兴奋的工作,可能会有奇怪的后果。

我解决它运行:

 chmod 400 ~/.ssh/id_rsa 

我希望能提供帮助。 祝你好运。

在最近解决了这个问题之后,这是谷歌的顶级成果之一,我想我会在这里讨论一个简单的工作: http : //code.google.com/p/msysgit/issues/detail? id = 261#C40

只需要用你的cygwin ssh.exe覆盖mysys ssh.exe

我刚刚在Windows XP上遇到了同样的问题。 我试图对我的〜/ .ssh / id_rsa文件chmod 700,但似乎没有工作。 当我看看在〜/ .ssh / id_rsa上使用ls -l的权限时,我可以看到我的有效权限仍然是644。

然后我记得,Windows权限也从文件夹inheritance权限,并且文件夹仍然对所有人开放。 一个解决scheme可能是为文件夹设置权限,但我认为更好的方法是告诉系统忽略此文件的inheritance。 这可以使用文件属性中安全选项卡上的高级选项来完成,并取消选中“从父权限inheritance…”

这可能有助于其他人也有同样的问题。

我正在玩Git 1.6.5,我无法复制你的设置:

 Administrator@WS2008 /k/git $ ll ~/.ssh total 8 drwxr-xr-x 2 Administ Administ 4096 Oct 13 22:04 ./ drwxr-xr-x 6 Administ Administ 4096 Oct 6 21:36 ../ -rw-r--r-- 1 Administ Administ 0 Oct 13 22:04 c.txt -rw-r--r-- 1 Administ Administ 403 Sep 30 22:36 config_disabled -rw-r--r-- 1 Administ Administ 887 Aug 30 16:33 id_rsa -rw-r--r-- 1 Administ Administ 226 Aug 30 16:34 id_rsa.pub -rw-r--r-- 1 Administ Administ 843 Aug 30 16:32 id_rsa_putty.ppk -rw-r--r-- 1 Administ Administ 294 Aug 30 16:33 id_rsa_putty.pub -rw-r--r-- 1 Administ Administ 1626 Sep 30 22:49 known_hosts Administrator@WS2008 /k/git $ git clone git@github.com:alexandrul/gitbook.git Initialized empty Git repository in k:/git/gitbook/.git/ remote: Counting objects: 1152, done. remote: Compressing objects: 100% (625/625), done. remote: Total 1152 (delta 438), reused 1056 (delta 383)s Receiving objects: 100% (1152/1152), 1.31 MiB | 78 KiB/s, done. Resolving deltas: 100% (438/438), done. Administrator@WS2008 /k/git $ ssh git@github.com ERROR: Hi alexandrul! You've successfully authenticated, but GitHub does not pro vide shell access Connection to github.com closed. $ ssh -v OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007 

chmod不会修改我的密钥的文件权限。

环境:

  • NTFS上的Windows Server 2008 SP2
  • 用户:pipe理员
  • 环境variables:
    • PLINK_PROTOCOL = SSH
    • HOME = / C /型材/家

更新: Git 1.6.5.1也适用。

这是Windows中特别涉及的问题,仅仅是正确地修改文件是不够的。 你必须build立你的环境。

在Windows上,这为我工作:

  1. 安装cygwin。

  2. 用cygwin的ssh.exereplacemsysgit ssh.exe。

  3. 使用cygwin bash,chmod 600私钥文件,这是我的“id_rsa”。

  4. 如果仍然无法工作,请转至控制面板 – >系统属性 – >高级 – >环境variables,并添加以下环境variables。 然后重复步骤3。

    variables值
    CYGWIN sbmntsec

我可以通过做两件事来解决这个问题,尽pipe你可能不需要做第一步。

  1. 从cygwin ssh.exe和所有cyg * .dll复制到Git的bin目录中(这可能不是必须的,但是这是我采取的一步,但这仅仅是不能解决的问题)

  2. 请按照以下步骤操作:http: //zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/

    我在〜/ .ssh / config文件中添加了一些细节:

主机heroku.com
主机名为heroku.com
港口22
身份只有是的
IdentityFile〜/ .ssh / id_heroku
TCPKeepAlive是的
用户brandon

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

  1. 然后添encryption钥:
    heroku键:添加〜/ .ssh / id_heroku.pub

对我来说,诀窍是更新CYGWIN环境variables:“ tty nodosfilewarning ”。 甚至不需要chmod密钥。

不是对主要问题的直接回答,而是关于cygwin文件夹如何工作的问题……一般来说,cygwin会将所有“您的”文件放在c:\ cygwin \ home \ username下。 它将该文件夹视为任何用户特定的设置而不是Windows用户目录。

除非你想保留这个私钥/公钥对(id_rsa / id_rsa.pub),或者想把你的头撞到墙上,否则我build议重新创build它们并在github上更新你的公钥。

首先制作〜/ .ssh目录的备份副本。

input以下内容并回答“是”是否要覆盖现有文件。

 ssh-keygen -t rsa 

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

 cat ~/.ssh/id_rsa.pub | pbcopy 

在github上转到您的帐户并添加此密钥。

 Name: My new public key Key: <PASTE> 

从terminal退出并重新启动一个新的terminal。

如果你从来没有input过公开密钥,就会得到像你input密码一样的无意义的错误信息,那么考虑一下这个重新开始的技术。 如上所见,这并不复杂。

我从来没有设法让Git在Powershell中完全工作。 但在git bash shell中,我没有任何权限相关的问题,而且我也不需要设置chmod etc …在将gsh添加到Github后,我已经启动并运行了。

在terminal上键入:

 chmod -Rf 700 ~/.ssh/ 

然后再试一次。

你是否从另一台机器复制密钥文件?

我刚刚在客户机上创build了一个id_rsa文件,然后粘贴了我想要的密钥。 没有权限问题。 没有设置。 它只是工作。 如果您使用PuTTYgen创build私钥,它也可以工作。

如果你是从另一台机器复制的话,可能还有一些隐藏的组问题。

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

在2015年2月左右( 1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin )将Cygwin安装升级到版本之后,我突然遇到UNPROTECTED PRIVATE KEY FILE警告。

运行以下命令后,我解决了这个问题:

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

( 另一个问题的另一个答案给出了更多的上下文

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

 cd ~/.ssh chmod 700 id_rsa.pub 

这在Mac上适用于我。