最近一直无法clone或者push到github,正在寻找根本原因。
这是在窗户上
我有 cygwin + git 和 msysgit。
Msysgit 使用以下选项安装:
开放SSH
从 Windows 命令提示符使用 Git
这给了我 4 个环境来尝试使用 git:
Windows cmd 提示符
电源外壳
重击
赛格温
不知何故,我设法让自己进入一个位置,当我尝试使用 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
关于如何真正修复这些权限的任何想法?
您更改了整个目录的权限,我同意 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 权限等。
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
None
的 group。 (我想这是未显式定义组时的标准过程)。对显式组 Users
的更改据说允许 cygwin 分离权限,我最终可以设置 600 而不是自动 660。
chmod 600
时,git 会抱怨我的权限仍然是 0660
。修复组所有权使 chown 正确应用。
对于 *nix 系统,明显的解决方法是 chmod 600 id_rsa
ofc,但在 Windows 7 上,我不得不用头撞墙一段时间,但后来我找到了神奇的解决方案:
转到我的电脑/右键单击/属性/高级系统设置/环境变量并删除变量(可能来自系统和用户环境):
CYGWIN
基本上,它是 git windows 二进制文件使用的 mingw32 中的一个缺陷,总是看到所有文件 644 和所有文件夹 755。删除环境变量不会改变这种行为,但它似乎告诉 ssh.exe 忽略该问题。如果您确实通过资源管理器安全设置为您的 id_rsa 设置了适当的权限(除了您自己的用户之外,实际上不需要任何其他用户,不是“每个人”,不是“管理员”,不是“系统”。没有。只有你) ,你仍然是安全的。
现在,为什么 mingw32(与 cygwin 不同的系统)会使用 CYGWIN 环境变量,这超出了我的理解。对我来说似乎是一个错误。
我在 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\
背景:一般问题是这两者的结合:
BUG:mingw32 将所有文件视为 644(其他/组可读),而我在 mingw32、cygwin 或 Windows 中尝试的任何方法都无法修复它。
mingw32 的 SSH 版本不允许私钥使用(通常是服务器中的一个好策略)。
c:\Program Files\Git\bin\ssh.exe
替换为 c:\cygwin\bin\ssh.exe
,因此无需编写文件 c:\Documents and Settings\<username>\.ssh\config
。正确的 ?
LogLevel DEBUG
添加到 .ssh\config 文件以从 git.exe 启动的 ssh.exe 进程中获取调试输出。
对于使用找到的 Git 的 Windows 7 here(它使用 MinGW,而不是 Cygwin):
在 Windows 资源管理器中,右键单击您的 id_rsa 文件并选择属性 选择安全选项卡并单击编辑... 选中除管理员外的所有组的完全控制旁边的拒绝框 重试您的 Git 命令
好的,这就是我实际上是如何强制更改我的 Windows 文件关于 Win7 上的权限本身的:在 Windows 资源管理器中找到你的 ssh 密钥:C:\Users[your_user_name_here].ssh\id_rsa
右键单击文件>属性>安全选项卡>高级按钮>更改权限
现在删除实际上不是您的用户名的所有人。这包括管理员和系统用户。此时您可能会得到一个关于继承权限的对话 - 选择不继承的选项 - 因为我们只想更改此文件。
单击确定并保存直到完成。
我为此奋斗了好几天,因为我的 Windows 不会从命令行更改文件权限。通过这种方式,它实际上也完成了——而不是使用令人兴奋的变通方法,这可能会产生奇怪的后果。
从属性更改文件权限、禁用继承和运行 chmod 400 对我不起作用。我的私钥文件的权限是:
-r--r----- 1 alex 无 1766 年 3 月 8 日 13:04 /home/alex/.ssh/id_rsa
然后我注意到该组没有,所以我就跑了
chown alex:Administrators ~/.ssh/id_rsa
然后我可以使用 chmod 400 成功更改权限,并运行 git push。
对于 MAC 用户:
通过在终端中键入以下内容来更改密钥对文件的设置:
chmod og-r *filename.pem*
(确保您位于正确的目录或命令中的路径文件名正确)。
在最近遇到这个问题并且这是谷歌的顶级结果之一之后,我想我会在这里讨论中记录的一个简单的工作: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权限也继承了文件夹的权限,并且文件夹仍然对所有人开放。一个解决方案也可以为文件夹设置权限,但我认为更好的方法是告诉系统忽略此文件的继承。这可以使用文件属性中安全选项卡上的高级选项来完成,并取消选中“从父权限继承...”
这可能对其他有同样问题的人有所帮助。
我解决它运行:
chmod 400 ~/.ssh/id_rsa
我希望能有所帮助。祝你好运。
我现在正在使用 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
PLINK_PROTOCOL=ssh
主页=/c/profiles/home
更新:Git 1.6.5.1 也可以。
这是 Windows 上一个特别复杂的问题,仅仅正确地对文件进行 chmod 是不够的。你必须设置你的环境。
在 Windows 上,这对我有用:
安装cygwin。将 msysgit ssh.exe 替换为 cygwin 的 ssh.exe。使用 cygwin bash,chmod 600 私钥文件,对我来说是“id_rsa”。如果还是不行,进入控制面板->系统属性->高级->环境变量,添加如下环境变量。然后重复步骤 3。变量值 CYGWIN sbmntsec
我可以通过做两件事来解决这个问题,尽管您可能不必执行第 1 步。
从 cygwin ssh.exe 和所有 cyg*.dll 复制到 Git 的 bin 目录中(这可能不是必需的,但这是我采取的一个步骤,但仅此一项并不能解决问题)按照以下步骤操作:http://zylstra.wordpress。 com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/ 我在 ~/.ssh/config 文件中添加了一些细节:
主机 heroku.com 主机名 heroku.com 端口 22 IdentitiesOnly 是 IdentityFile ~/.ssh/id_heroku TCPKeepAlive 是 用户 Brandon
我必须使用 User 作为 heroku.com 的电子邮件地址 注意:这意味着您需要创建一个密钥,我按照此创建密钥,当它提示输入密钥的名称时,请务必指定 id_heroku http://help.github.com/win-set-up-git/
然后添加密钥: heroku keys:add ~/.ssh/id_heroku.pub
对我来说,诀窍是更新 CYGWIN 环境变量:“tty nodosfilewarning”。甚至不需要 chmod 密钥。
不是对主要问题的直接回答,而是关于 cygwin 文件夹如何工作的问题......作为一般规则,cygwin 将所有“你的”文件放在 c:\cygwin\home\username 的等效项下。它会将该文件夹视为任何用户特定的设置,而不是 Windows 用户目录。
除非您有理由想要保留该私钥/公钥对 (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>
从您的终端退出并重新启动一个新终端。
如果您在从未输入过公钥时收到诸如“输入您的密码”之类的无意义的错误消息,请考虑这种重新开始技术。正如你在上面看到的,它并不复杂。
我从来没有设法让 git 在 Powershell 中完全工作。但是在 git bash shell 中我没有任何与权限相关的问题,也不需要设置 chmod 等...在将 ssh 添加到 Github 后,我就可以运行了。
在终端输入:
chmod -Rf 700 ~/.ssh/
然后再试一次。
您是否从另一台机器复制了密钥文件?
我刚刚在客户端计算机上创建了一个 id_rsa
文件,然后将我想要的密钥粘贴到其中。没有权限问题。没什么可设置的。它刚刚奏效。如果您使用 PuTTYgen 创建私钥,它也可以工作。
如果您从另一台机器复制它,可能是一些隐藏的组问题。
在两台 Windows 8.1 机器上测试。使用 Sublime Text 3 复制和粘贴私钥。使用 Git Bash (Git-1.9.4-preview20140611)。
在将我的 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 提供了更多上下文)
@koby 的回答对我不起作用,所以我做了一点改变。
cd ~/.ssh
chmod 700 id_rsa.pub
这对我在 Mac 上很有效。
我在 Windows 10 上遇到了同样的问题,我尝试通过 SSH 连接到 Vagrant 盒子。这似乎是旧 OpenSSH 版本中的一个错误。什么对我有用:
从 http://www.mls-software.com/opensshd.html where.exe ssh 安装最新的 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按钮->设置->“编辑系统环境变量”在“高级”选项卡上单击“环境变量...”在系统变量下编辑“路径”。选择“C:\Program Files\OpenSSH\bin”和“Move Up”,使其出现在顶部。单击 OK 重新启动您的控制台,以便可以应用新的环境变量。
我的系统有点乱 bash/cygwin/git/msysgit/maybe-more...
chmod
对密钥或 config
文件没有影响。
然后我决定从 Windows 中处理它,这很有效。
右键单击需要修复权限的文件。选择属性。选择安全选项卡。单击底部附近的高级。单击顶部附近所有者旁边的更改。键入“My-Awesome-Username”(显然将其更改为您当前的 Windows 用户名),然后单击“检查名称”,然后单击“确定”。在权限条目下:突出显示不是“My-Awesome-Username”的每个用户,然后选择删除。重复此操作,直到只剩下“My-Awesome-Username”。选择“My-Awesome-Username”,然后单击下方的编辑。确保顶部的类型:设置为允许,然后勾选完全控制旁边的复选框。点击确定,应用,确定,确定。现在再试一次...
似乎有时模拟bash无法控制文件所有权。这特别奇怪,因为它是从模拟 bash 脚本生成的。去搞清楚。
此处建议的解决方法(chmod/chgrp/setfacl/windows perms)均不适用于 Windows 7 企业 VM 上的 msys64。最后,我通过使用带有标准输入上提供的密钥的 ssh 代理解决了这个问题。将此添加到我的 .bash_profile
使其成为我登录的默认设置:
eval $(ssh-agent -s)
cat ~/.ssh/id_rsa | ssh-add -k -
现在我可以使用 ssh 遥控器进行 git push 和 pull 了。
-rwx------
。因此,如果您正确执行了 chmod 命令,那么您所显示的内容是不正确的。