在 Windows 8 上通过 cygwin 使用 git

在 Windows 8 上通过 cygwin 使用 git

我有一台 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

一切运行良好。

相关内容