代码之家  ›  专栏  ›  技术社区  ›  Ben Scheirman

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

  •  239
  • Ben Scheirman  · 技术社区  · 15 年前

    这是在windows上

    我有cygwin+git和msysgit。

    Msysgit是通过以下选项安装的:

    这使我有4种环境可以尝试在其中使用git:

    • Windows命令提示符
    • Git Bash
    • 西格温

    不知怎的,当我尝试使用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文件夹位于其他地方,但我不知道为什么

    $ 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

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

    23 回复  |  直到 15 年前
        1
  •  369
  •   Koby    15 年前

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

    cd ~/.ssh
    chmod 700 id_rsa
    

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

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

    编辑:也刚刚通过谷歌找到了这个链接-- Fixing "WARNING: UNPROTECTED PRIVATE KEY FILE!" on Linux 虽然它的目标是linux,但它可能会有所帮助,因为我们讨论的是liunx权限等等。

        2
  •  74
  •   Community c0D3l0g1c    7 年前
        3
  •  18
  •   Tuncay Göncüoğlu    12 年前

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

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

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

    现在,为什么mingw32,一个不同于cygwin的系统,会 任何

        4
  •  13
  •   Steve Clay    13 年前

    我使用的是XP,这使Git Bash能够与Github进行通信(经历了很多挫折):

    1. 复制 c:\cygwin\bin\cyg* c:\Program Files\Git\bin\
    2. 复制 c:\cygwin\bin\ssh.exe c:\ProgramFiles\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
  •  10
  •   Brett Pennings    12 年前

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

    1. 在windows资源管理器中,右键单击id\u rsa文件并选择属性
    2. 选择安全选项卡并单击编辑。。。
    3. 选中除管理员之外的所有组的完全控制旁边的拒绝框
    4. 重试Git命令
        6
  •  7
  •   diannaL    11 年前

    好的,下面是我在Windows文件上强制更改Win7上权限的方式: 在windows资源管理器中查找ssh密钥: C:\Users[此处为您的用户名].ssh\id\u rsa

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

    单击确定并保存,直到完成。

        7
  •  6
  •   alex.m    10 年前

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

    -r--r-----1 alex None 1766年3月8日13:04/home/alex/.ssh/id\u rsa

    然后我注意到那群人一个也没有,所以我就跑了

    chown alex:Administrators~/.ssh/id\u rsa

    然后我可以使用chmod400成功地更改权限,并运行git推送。

        8
  •  4
  •   Sergey K.    12 年前

    对于MAC用户:

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

    chmod og-r *filename.pem*
    

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

        9
  •  3
  •   CristianOrellanaBak    10 年前

    我在运行时解决它:

    chmod 400 ~/.ssh/id_rsa
    

    我希望能帮上忙。祝你好运

        10
  •  2
  •   chriskhan    14 年前

    最近我遇到了这个问题,这是谷歌最热门的搜索结果之一,我想我应该在这里讨论一个简单的解决方法: http://code.google.com/p/msysgit/issues/detail?id=261#c40

        11
  •  2
  •   daramarak    14 年前

    我最近在WindowsXP上也遇到了同样的问题。我试图在我的~/.ssh/id_rsa文件上安装chmod 700,但它似乎不起作用。当我在~/.ssh/id_rsa上使用ls-l查看权限时,我可以看到我的有效权限仍然是644。

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

    这可能对其他有同样问题的人有所帮助。

        12
  •  1
  •   alexandrul    15 年前

    我现在正在使用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
    • 环境变量:
      • HOME=/c/profiles/HOME

    更新: Git1.6.5.1也可以工作。

        13
  •  1
  •   Michael Bosworth    13 年前

    在Windows上,这对我很有用:

    1. 安装cygwin。

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



    3. 可变值
      CYGWIN sbmntsec

        14
  •  1
  •   Christy Hotney    13 年前

    我可以通过做两件事来解决这个问题,尽管您可能不必执行步骤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文件中添加了一些详细信息:

    主持人heroku.com
    主机名heroku.com
    端口22
    唯一相同的是
    IdentityFile~/.ssh/id\u heroku

    用户布兰登

    我必须使用该用户作为heroku.com的电子邮件地址 注意:这意味着您需要创建一个键,我按照此创建键,当它提示输入键的名称时,请确保指定id\u heroku http://help.github.com/win-set-up-git/

    1. 然后添加密钥:
      heroku密钥:添加~/.ssh/id\u heroku.pub
        15
  •  1
  •   tohokami    11 年前

    我的诀窍是更新 西格温 环境变量,带有: “.甚至不需要用chmod键。

        16
  •  0
  •   J Wynia    15 年前

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

        17
  •  0
  •   l3x    11 年前

    除非出于某种原因,您希望保留该私钥/公钥对(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>
    

    退出终端并重新启动新的终端。

        18
  •  0
  •   Sam Kenny    10 年前

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

        19
  •  0
  •   João Paulo Cercal    10 年前

    在终端上键入:

    chmod -Rf 700 ~/.ssh/
    

    然后再试一次。

        20
  •  0
  •   PhilT    10 年前

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

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

    如果您是从另一台机器复制组,则可能存在隐藏的组问题。

        21
  •  0
  •   Community c0D3l0g1c    7 年前

    将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 对于另一个问题,请提供更多上下文)

        22
  •  0
  •   Han Pengbo    9 年前

    cd ~/.ssh
    chmod 700 id_rsa.pub
    

        23
  •  0
  •   Jasper Citi    7 年前

    我在Windows10上也遇到了同样的问题,当时我试图用SSH连接到一个流浪汉的盒子中。这似乎是旧OpenSSH版本中的一个bug。对我有用的是:

    1. 从安装最新的OpenSSH http://www.mls-software.com/opensshd.html
    2. 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是路径中的第二个,因此它不会执行。

    1. 右键单击Windows按钮->设置->“编辑系统环境变量”
    2. 在“高级”选项卡上,单击“环境变量…”
    3. 在系统变量下编辑“路径”。
    4. 重新启动控制台,以便应用新的环境变量。
        24
  •  0
  •   Jack_Hu    5 年前

    我的系统有点乱,bash/cygwin/git/msysgit/可能更多。。。

    chmod 对键没有影响,或者 config

    然后我决定从Windows上接近它,这很有效。

    1. 右键单击需要修复其权限的文件。
    2. 选择 Properties .
    3. 选择 Security 标签。
    4. 点击 Advanced 接近底部。
    5. 点击 Change 旁边 Owner 接近顶部。
    6. 键入“我最棒的用户名”(显然将其更改为您当前的Windows用户名),然后单击 Check Names 然后 OK .
    7. 在下面 Permission entries: Remove . 重复这一步,直到“我最棒的用户名”是唯一剩下的。
    8. Edit 在下面
    9. 确保 Type: 在顶部设置为 Allow Full control
    10. 好啊 , Apply , 好啊 , 好啊 .

    11. 现在再试一次。。。

    似乎有时候模拟bash无法控制文件所有权。它特别奇怪,因为它是从模拟bash脚本生成的。想想看吧

        25
  •  0
  •   Andy Brown    4 年前

    .bash_profile 使其成为我登录的默认设置:

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

    现在我可以使用ssh远程设备进行git推拉。