首页 文章

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

提问于
浏览
237

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

产生与以前相同的权限 .

UPDATE:

我试图修复cygwin中那些文件的权限,cygwin正确报告他们的权限,gitbash没有:alt text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg

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

23 回答

  • 1

    在最近遇到这个问题之后,这是google的最高结果之一,我认为我会在这里讨论一个简单的工作:http://code.google.com/p/msysgit/issues/detail?id=261#c40

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

  • 2

    @koby的回答对我不起作用,所以我做了一点改动 .

    cd ~/.ssh
    chmod 700 id_rsa.pub
    

    这对我在Mac上运行良好 .

  • 74

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

    cd ~/.ssh
    chmod 700 id_rsa
    

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

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

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

    编辑:也刚刚通过谷歌发现这个链接 - Fixing "WARNING: UNPROTECTED PRIVATE KEY FILE!" on Linux虽然's targeted at linux, it might help since we'正在谈论liunx权限等 .

  • 0

    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
    
  • 4

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

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

    CYGWIN

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

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

  • 10

    我正在使用XP,这允许Git Bash与Github沟通(经过很多挫折):

    • 复制 c:\cygwin\bin\cyg* (~50个文件)到 c:\Program Files\Git\bin\

    • 复制 c:\cygwin\bin\ssh.exec:\Program Files\Git\bin\ (覆盖)

    • 创建包含以下内容的文件 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"
    
    • (可选)使用 ssh -v git@github 查看已调试的连接 .

    • 试试!

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

    • BUG:mingw32将所有文件视为644(其他/组可读),我在mingw32,cygwin或Windows中尝试的任何内容都无法修复它 .

    • mingw32 's SSH version won' t允许私钥(通常是服务器中的良好策略) .

  • 0

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

    • 在Windows资源管理器中,右键单击id_rsa文件,然后选择“属性”

    • 选择“安全”选项卡,然后单击“编辑...”

    • 检查所有组的完全控制旁边的拒绝框除了管理员

    • 重试你的Git命令

  • 1

    从属性更改文件权限,禁用继承和运行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 .

  • 17

    对于MAC用户:

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

    chmod og-r *filename.pem*
    

    (确保您在正确的目录中,或命令中的路径文件名正确) .

  • 352

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

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

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

    单击确定并保存直到完成 .

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

  • 0

    我解决它运行:

    chmod 400 ~/.ssh/id_rsa
    

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

  • 0

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

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

    这对于具有相同问题的其他人可能会有所帮助 .

  • 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 / profiles / home

    Update: Git 1.6.5.1也可以 .

  • 0

    这是Windows上一个特别涉及的问题,仅仅正确地chmod文件是不够的 . 你必须设置你的环境 .

    在Windows上,这对我有用:

    • 安装cygwin .

    • 用cygwin的ssh.exe替换msysgit ssh.exe .

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

    • 如果仍然不起作用,请转到“控制面板” - >“系统属性” - >“高级” - >“环境变量”,然后添加以下环境变量 . 然后重复步骤3 .

    Variable Value
    CYGWIN sbmntsec

  • 3

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

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

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

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

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

    对我来说,诀窍是用 tty nodosfilewarning 更新 CYGWIN 环境变量 . 甚至不需要chmod键 .

  • 0

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

  • 13

    除非有理由想要保留私钥/公钥对(id_rsa / id_rsa.pub),或者喜欢敲打墙,我建议只重新创建它们并在github上更新你的公钥 .

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

    输入以下内容并回答“是”是否要覆盖现有文件 .

    ssh-keygen -t rsa
    

    将公钥的内容复制到剪贴板 . (以下是你应该如何在Mac上完成它) .

    cat ~/.ssh/id_rsa.pub | pbcopy
    

    转到github上的帐户并添加此密钥 .

    Name: My new public key
    Key: <PASTE>
    

    退出终端并重新启动 .

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

  • 0

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

  • 2

    输入终端:

    chmod -Rf 700 ~/.ssh/
    

    然后再试一次 .

  • 1

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

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

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

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

  • 6

    将我的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到另一个问题提供更多背景)

  • 0

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

    (如果您使用的是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按钮 - >设置 - > "Edit the System Environment Variables"

    • 在"Advance"选项卡上单击"Environment Variables..."

    • 在系统变量下编辑"Path" .

    • 选择"C:\Program Files\OpenSSH\bin"和"Move Up"使其显示在顶部 .

    • 单击“确定”

    • 重新启动控制台,以便可以应用新的环境变量 .

相关问题