![在 Windows 8 上通过 cygwin 使用 git](https://linux22.com/image/1297346/%E5%9C%A8%20Windows%208%20%E4%B8%8A%E9%80%9A%E8%BF%87%20cygwin%20%E4%BD%BF%E7%94%A8%20git.png)
我有一台 Windows 8 开发预览版(不确定是否相关,但我在 W7 上从未遇到过这种麻烦)机器,并且我正尝试从 github 克隆一个 git repo。
问题是我的 ~/.ssh/id_rsa 有 440 个权限,而它需要的是 400。我尝试过修改它,但用户权限的任何更改都会反映在组权限中(即修改 600 会导致 660,等等)。这似乎在整个文件系统中的任何文件中都是恒定的。
我尝试过修改 ACL,但无济于事(完全控制我的用户并拒绝所有人导致 000)
这里有一些有用的输出:
$ git clone [removed]
Cloning into [removed]...
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/home/john/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/john/.ssh/id_rsa
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
$ ll ~/.ssh
total 6
-r--r----- 1 john None 1675 Nov 30 19:15 id_rsa
-rw-rw---- 1 john None 411 Nov 30 19:15 id_rsa.pub
-rw-rw-r-- 1 john None 407 Nov 30 18:43 known_hosts
$ chmod -v 400 ~/.ssh/id_rsa
mode of `/home/john/.ssh/id_rsa' changed from 0440 (r--r-----) to 0400 (r--------)
$ ll ~/.ssh
total 6
-r--r----- 1 john None 1675 Nov 30 19:15 id_rsa
-rw-rw---- 1 john None 411 Nov 30 19:15 id_rsa.pub
-rw-rw-r-- 1 john None 407 Nov 30 18:43 known_hosts
$ set | grep CYGWIN
CYGWIN='sbmntsec ntsec server ntea'
我知道我可以使用 msysgit 或其他东西,但我更希望能够从一个终端完成所有操作
编辑:由于同样的原因,Msysgit 也不起作用
答案1
不需要空组。
在安装 cygwin 期间,所有文件都不属于任何组。您可以通过执行 来检查这一点ls -al
。您将看到文件上没有组(“无”)。只需将其更改为用户:
chgrp Users *
此后你就可以做chmod
任何你想做的事。
答案2
我已经找到了一种特定于 Cygwin 的方法来解决这个问题。
简短版本:
只需创建一个新的空 Windows 组,使用 chgrp 将 id_rsa 的组更改为此组,然后拒绝该组的读/写权限。
长版本:
按下超级键并输入系统管理控制台. 使用此管理器创建一个空组,称为 say空组
现在我们需要告诉 Cygwin 有关这个新组的信息。
mkgroup > /etc/group
接下来我们更新id_rsa:
chgrp EMPTY_GROUP ~/.ssh/id_rsa
最后,去寻找id_rsa在 Windows 资源管理器中,在属性中的“安全”选项卡下,拒绝读/写权限,然后就可以开始了。
我不确定 Cygwin 如何在 7 中能够处理这个问题而在 8 中却不能,但问题似乎源于 id_rsa 文件的组为 None ,而该组始终具有完全读/写访问权限。
此外,这似乎只适用于 Cygwin 附带的 ssh.exe,所以如果您想将 ssh 与 git 一起使用,请用 Cywgin 安装中 bin 文件夹中的 ssh.exe 覆盖 git 安装中 bin 中的 ssh.exe。
答案3
Win8 + Cygwin
我使用的是 Windows 8,64 位。执行以下操作可以解决此问题:
## Start Cygwin shell
cd .ssh
chmod 600 key-file-name
答案4
我也想对这个问题发表评论。我在 Windows 7 PC 上通过 Cygwin 使用 git 时遇到了类似的问题。
当我尝试将更改从本地 git 存储库推送到远程存储库(使用 ssh 和密钥对进行身份验证)时,git 抛出了一条消息,指出权限0660太开放了
〜/.ssh/id_rsa。
当然,ssh-agent拒绝这个打开的私钥也是可以的。
因此,我尝试了此线程和其他线程中提到的与文件和 ~/.ssh 文件夹的所有权和 rwx-pattern 相关的事情
chgrp Users ~/.ssh/*
chmod 400 ~/.ssh/id_rsa
然而,同样的错误却一次又一次地出现。
由于某种原因,需要终止 cygwin 中的 ssh-agent 进程并在 bourne again shell(bash)中执行以下命令。
eval `ssh-agent -s`
不要忘记向 ssh-agent 添加所需的身份,例如
ssh-add ~/.ssh/id_rsa
然后我重复了一个有效的推送命令,例如
git push origin master
一切运行良好。