Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Git GUI或SSH keygen的SSH私钥权限过于开放_Git_Ssh_Cygwin_Msysgit_Openssh - Fatal编程技术网

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

使用Git GUI或SSH keygen的SSH私钥权限过于开放,git,ssh,cygwin,msysgit,openssh,Git,Ssh,Cygwin,Msysgit,Openssh,最近,我无法克隆或推送到github,我正在试图找到根本原因 这是在windows上 我有cygwin+git和msysgit Msysgit是通过以下选项安装的: OpenSSH 从Windows命令提示符使用Git 这使我有4种环境可以尝试在其中使用git: Windows命令提示符 动力壳 Git Bash 西格温 不知怎的,当我尝试使用msysgit、cmd.exe或Powershell克隆存储库时,我遇到了以下错误: > Initialized empty Git rep

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

这是在windows上

我有cygwin+git和msysgit

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

  • OpenSSH
  • 从Windows命令提示符使用Git
这使我有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文件夹位于其他地方,但我不知道为什么

在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(读、写、执行),其他所有人都将无法访问

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

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


编辑:也刚刚通过谷歌找到了这个链接——虽然它是针对linux的,但它可能会有所帮助,因为我们讨论的是liunx权限等等。

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

我现在正在使用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_协议=ssh
    • HOME=/c/profiles/HOME

更新:Git 1.6.5.1也可以使用。

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

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


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

最近我遇到了这个问题,这是谷歌的一个顶级结果,我想我会在这里的讨论中介绍一个简单的解决方法:


只需使用cygwin ssh.exe覆盖mysys ssh.exe即可。我在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\config

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile "/cygdrive/c/Documents and Settings/<username>/.ssh/id_rsa"
    
    Host github.com
    用户git
    主机名github.com
    首选身份验证公钥
    IdentityFile“/cygdrive/c/Documents and Settings//.ssh/id_rsa”
    
  • (可选)使用
    ssh-vgit@github
    查看已调试的连接

  • 试试推 背景:一般问题是这两方面的结合:

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

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

        在Windows上,这对我很有用:

      • 安装cygwin

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

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

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

        变量值
        CYGWIN sbmntsec


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

      • 在windows资源管理器中,右键单击您的id
        chmod og-r *filename.pem*
        
        chgrp -Rv Users ~/.ssh/* 
        chmod -vR 600 ~/.ssh/id_rsa
        
        ssh-keygen -t rsa
        
        cat ~/.ssh/id_rsa.pub | pbcopy
        
        Name: My new public key
        Key: <PASTE>
        
        chmod -Rf 700 ~/.ssh/
        
        chmod 400 ~/.ssh/id_rsa
        
        setfacl -s u::rw-,g::---,o:--- ~/.ssh/id_rsa
        
        cd ~/.ssh
        chmod 700 id_rsa.pub
        
        C:\Windows\System32\OpenSSH\ssh.exe
        C:\Program Files\OpenSSH\bin\ssh.exe
        C:\opscode\chefdk\embedded\git\usr\bin\ssh.exe
        
        eval $(ssh-agent -s)
        cat ~/.ssh/id_rsa | ssh-add -k -