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

时间:2009-10-12 18:26:21

标签: git ssh cygwin msysgit openssh

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

这是在Windows上

我有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 text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

关于如何真正修复这些权限的任何想法?

25 个答案:

答案 0 :(得分:356)

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

cd ~/.ssh
chmod 700 id_rsa

在.ssh文件夹中。这将把id_rsa文件设置为仅为所有者(你)的rwx(读,写,执行),并为其他人设置为零访问。

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

如果这不起作用,我会尝试卸载msysgit,删除计算机上的所有.ssh文件夹(仅用于安全措施),然后用您想要的设置重新安装msysgit并尝试重新开始(尽管我认为你告诉我你已经试过这个了。)

已编辑:也刚刚通过Google找到此链接 - Fixing "WARNING: UNPROTECTED PRIVATE KEY FILE!" on Linux虽然它针对的是Linux,但它可能有所帮助,因为我们正在讨论liunx权限等。

答案 1 :(得分:74)

cygwin的chmod有一个错误,请参阅:

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

答案 2 :(得分:17)

对于* nix系统,显而易见的修复是chmod 600 id_rsa ofc,但是在Windows 7上我不得不将头撞到墙上一段时间,但后来我找到了神奇的解决方案:

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

<强> CYGWIN

基本上,它是git windows binary使用的mingw32中的一个缺陷,看到所有文件644和所有文件夹755总是如此。删除环境变量不会改变该行为,但它似乎告诉ssh.exe忽略该问题。如果您通过资源管理器安全设置确实为您的id_rsa设置了适当的权限(那里除了您自己之外没有任何其他用户,不是“所有人”,不是“管理员”,而不是“系统”。没有。只是你) ,你仍然是安全的。

现在,为什么mingw32,一个与cygwin不同的系统,会使 任何 使用CYGWIN环境变量,超出我的范围。对我来说看起来像个错误。

答案 3 :(得分:13)

我在XP上,这让Git Bash与Github沟通(经过很多挫折):

  1. c:\cygwin\bin\cyg*(~50个文件)复制到c:\Program Files\Git\bin\
  2. c:\cygwin\bin\ssh.exe复制到c:\Program Files\Git\bin\(覆盖)
  3. 创建包含以下内容的文件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查看已调试的连接。

  5. 尝试推!
  6. 背景:一般问题是这两者的结合:

    • BUG:mingw32将所有文件视为644(其他/组可读),我在mingw32,cygwin或Windows中尝试的任何内容都无法修复它。
    • mingw32的SSH版本不允许使用私钥(通常是服务器中的好策略)。

答案 4 :(得分:10)

对于Windows 7使用Git找到here(它使用的是MinGW,而不是Cygwin):

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

答案 5 :(得分:6)

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

  

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

然后我注意到该组是None,所以我跑了

  

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

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

答案 6 :(得分:4)

好的,这就是我在Win7上实际强制更改我的Windows文件的权限: 在Windows资源管理器中找到您的ssh密钥: C:\用户[your_user_name_here]的.ssh \ id_rsa

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

现在删除实际上不是您用户名的所有人。这包括管理员和系统用户。此时,您可能会获得有关继承权限的对话 - 选择不继承的选项 - 因为我们只想更改此文件。

单击“确定”并保存至完成。

我为此奋斗了好几天,因为我的Windows不会从命令行更改文件权限。这样它也可以完成 - 而不是使用激动人心的工作,这可能会产生奇怪的后果。

答案 7 :(得分:4)

对于MAC用户:

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

chmod og-r *filename.pem*

(确保您正确地位于正确的目录或路径文件名中。)

答案 8 :(得分:3)

我解决了它的问题:

chmod 400 ~/.ssh/id_rsa

我希望能帮到你。祝你好运。

答案 9 :(得分:2)

最近解决了这个问题之后,这是google搜索结果中的一个,我想我会在这里讨论一下简单的工作:http://code.google.com/p/msysgit/issues/detail?id=261#c40

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

答案 10 :(得分:2)

最近我在Windows XP上遇到了同样的问题。我尝试在我的〜/ .ssh / id_rsa文件中使用chmod 700,但它似乎没有用。当我在〜/ .ssh / id_rsa上使用ls -l查看权限时,我可以看到我的有效权限仍为644.

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

对于遇到同样问题的其他人来说,这可能会有所帮助。

答案 11 :(得分:1)

我的诀窍是用 tty nodosfilewarning “更新 CYGWIN 环境变量。甚至不需要chmod键。

答案 12 :(得分:1)

我现在正在玩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
  • 用户:管理员
  • 环境变量:
    • PLINK_PROTOCOL = SSH
    • HOME = / C /简档/家

更新: Git 1.6.5.1也可以。

答案 13 :(得分:1)

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

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

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

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

  3. 主持heroku.com
    主机名heroku.com
    港口22 身份只有是 IdentityFile~ / .ssh / id_heroku
    TCPKeepAlive是
    用户brandon

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

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

答案 14 :(得分:1)

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

在Windows上,这对我有用:

  1. 安装cygwin。

  2. 用cygwin的ssh.exe替换msysgit ssh.exe。

  3. 使用cygwin bash,chmod 600私钥文件,对我来说是“id_rsa”。

  4. 如果仍然无效,请转到控制面板 - &gt;系统属性 - &gt;高级 - &gt;环境变量并添加以下环境变量。然后重复步骤3.

    变量值
    CYGWIN sbmntsec

答案 15 :(得分:0)

这里建议的任何变通办法(chmod / chgrp / setfacl / windows perms)都不适用于Windows 7企业VM上的msys64。最后,我通过使用带有stdin提供的密钥的ssh代理来解决该问题。将此添加到我的.bash_profile使其成为我的默认登录名:

eval $(ssh-agent -s)
cat ~/.ssh/id_rsa | ssh-add -k -

现在我可以使用ssh遥控器进行git push和pull了。

答案 16 :(得分:0)

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

chmod对密钥或config文件没有影响。

然后我决定从Windows上使用它,该方法可以正常工作。

  1. 右键单击需要修复权限的文件。
  2. 选择Properties
  3. 选择Security标签。
  4. 点击底部附近的Advanced
  5. 点击顶部附近Change旁边的Owner
  6. 键入“ My-Awesome-Username”(显然将其更改为您当前的Windows用户名),然后依次单击Check NamesOK
  7. Permission entries:下,突出显示不是“ My-Awesome-Username”的每个用户,然后选择Remove。重复此操作,直到仅剩“ My-Awesome-Username”。
  8. 选择“我的用户名”,然后单击下面的Edit
  9. 确保顶部的Type:设置为Allow,然后勾选Full control旁边的复选框。
  10. 命中OKApplyOKOK

  11. 立即尝试...

似乎有时候,bash-bash无法控制文件所有权。它是特别奇怪的,因为它是由模仿bash脚本生成的。走吧。

答案 17 :(得分:0)

我在Windows 10上遇到了同样的问题,我尝试将SSH连接到Vagrant框中。这似乎是旧OpenSSH版本中的一个错误。什么对我有用:

  1. http://www.mls-software.com/opensshd.html
  2. 安装最新的OpenSSH
  3. where.exe ssh
  4. (如果您使用的是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在路径中排名第二,因此不会执行。

    更改顺序:

    1. 右键单击Windows按钮 - &gt;设置 - &gt; “编辑系统环境变量”
    2. 在“高级”标签上,点击“环境变量...”
    3. 在系统变量下编辑“路径”。
    4. 选择“C:\ Program Files \ OpenSSH \ bin”和“Move Up”,使其显示在顶部。
    5. 点击确定
    6. 重新启动控制台,以便可以应用新的环境变量。

答案 18 :(得分:0)

@ koby的回答对我不起作用,所以我做了一些改变。

cd ~/.ssh
chmod 700 id_rsa.pub

这对我在Mac上运行良好。

答案 19 :(得分:0)

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

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

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

another answer另一个问题提供了更多背景信息)

答案 20 :(得分:0)

您是否从其他计算机上复制了密钥文件?

我刚刚在客户端计算机上创建了一个id_rsa文件,然后粘贴了我想要的密钥。没有权限问题。什么都没有设定。它刚刚起作用。如果您使用PuTTYgen创建私钥,它也可以使用。

如果您从另一台计算机上复制它,可能会出现一些隐藏的群组问题。

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

答案 21 :(得分:0)

在终端输入:

chmod -Rf 700 ~/.ssh/

再试一次。

答案 22 :(得分:0)

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

答案 23 :(得分:0)

除非您有理由想要保留私钥/公钥对(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>

退出终端并重新启动。

如果您从未输入公钥时输入无效的错误消息,例如“输入您的密码”,请考虑这种重启技术。如上所述,它并不复杂。

答案 24 :(得分:0)

不是主要问题的直接答案,而是关于cygwin的文件夹如何工作的问题......作为一般规则,cygwin将所有“你的”文件置于c:\ cygwin \ home \ username的等价物下。它会将该文件夹视为任何特定于用户的设置,而不是Windows用户目录。