在Windows 8上使用git通过cygwin


16

我有一个Windows 8开发预览版(不确定它是否相关,但我从未在w7上遇到过麻烦)机器,我正在尝试从github克隆一个git repo。

问题是我的〜/ .ssh / id_rsa有440个权限,它需要400.我已经尝试过修改它但是用户权限的任何更改都会反映在组权限中(即chmod 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由于相同的原因不起作用


同样的问题在这里 Windows 8 Consumer Preview。
Simon Hartcher

“我已经尝试弄乱ACL但无济于事(完全控制我的用户并拒绝所有人导致000) ”所以ls -l显示权限为000----------) - 但你仍然能够读取文件,并做sshgit clone抱怨关于它?我推测ssh不会抱怨权限看起来过于严格。快速查看源代码往往会证实这一点,但我还没有测试过。
Keith Thompson

Answers:


26

没有必要为空组。

在安装cygwin期间,所有文件都不属于任何组。你可以通过做一个来检查这个ls -al。您将看到文件中没有组(“none”)。只需将其更改为用户:

chgrp Users *

在此之后,你可以chmod随心所欲。


chgrp Users *只会更改所有文件和文件夹$PWD。要更改所有子文件夹/文件以及$ PWD,请使用-R选项:chgrp -R users *
adam 2015年

4

我找到了一个特定于Cygwin的黑客来解决这个问题。

简短版本:
只需创建一个新的空窗口组,使用chgrp将id_rsa组更改为此组,然后拒绝该组的读/写权限。

长版:
按超级键并键入lusrmgr.msc。使用此管理器创建一个名为EMPTY_GROUP的空组

现在我们需要告诉Cygwin这个新组。

mkgroup > /etc/group

接下来我们更新id_rsa组:

chgrp EMPTY_GROUP ~/.ssh/id_rsa

最后,在Windows资源管理器中找到id_rsa,在Properties中的Security选项卡下,拒绝读/写权限,你应该好好去。

我不确定Cygwin是如何在7但不是8中处理这个问题,但问题似乎源于id_rsa文件组为None,这是一个始终具有完全读/写访问权限的组。

此外,这似乎只适用于Cygwin附带的ssh.exe,所以如果你想使用git说ssh,用你的Cywgin安装中的bin文件夹覆盖你的git安装中bin的ssh.exe 。


2

赢8 + Cygwin

我在Windows 8,64位。执行以下操作可以解决这个问题:

## Start Cygwin shell
cd .ssh
chmod 600 key-file-name

1

在cygwin中,键入以下命令:

  • 将正确的组设置为主文件夹:

    chgrp -Rv HomeUsers /home

  • 为ssh身份文件设置正确的权限:

    chmod 600 -Rv ~/.ssh/id*

注意:之前接受的答案已过期。群组名称为“HomeUsers”,而非“用户”,尚无评论。


1

我也想对这个问题发表评论。我在使用git通过Cygwin的Windows 7 PC上遇到了类似的问题。

当尝试将更改从我的本地git存储库推送到远程存储库(使用ssh和密钥对进行身份验证)时,git抛出一条消息,表明权限0660对于文件来说太开放了

的〜/ .ssh / id_rsa。

当然,ssh-agent可以拒绝这个打开的私钥。

所以我尝试了这个线程中提到的东西以及与文件的所有权和rwx-pattern以及〜/ .ssh文件夹相关的其他线程

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

一切都运作良好。


0

扩展Roi Danton的答案。如果您已经在旧的Windows安装上安装了Windows 8,并且之前的cygwin目录仍然存在,那么您需要先做其他一些事情。

首先,取得Cygwin目录/文件的所有权

将有一些与目录和子目录/文件关联的用户帐户看起来像 S-1-2-34-1234567890-1234567890-1234567890-123

用户帐户

删除这些并使用您自己的用户帐户获得所有权。

  1. 访问Propertiescygwin目录
  2. 点击AdvancedSecurity标签
  3. Change主人给自己。您可以输入您的名字或相关的电子邮件地址
  4. Remove 列表中的任何未知用户
  5. 点击 Enable Inheritance
  6. 选中`用此对象中的可继承权限条目替换所有子对象权限条目
  7. 单击OK底部,然后单击Yes对话框。

Windows安全性对话框

然后,在Cygwin中,更改所有密钥文件的用户组

来自Roi Danton的回答

在安装cygwin期间,所有文件都不属于任何组。你可以通过做一个来检查这个ls -al

  1. 打开Cygwin并导航到.ssh目录 -cd ~/.ssh
  2. 运行chgrp Users *- 这将允许您chmod正确地使用文件。
  3. 最后,跑chmod 400 *。600也将工作。

测试看它是否有效

只需ssh到您选择的服务器。就我而言,它的Bitbucket

好结果:

$ ssh hg@bitbucket.org
PTY allocation request failed on channel 0
conq: logged in as simonhartcher.

You can use git or hg to connect to Bitbucket. Shell access is disabled.
Connection to bitbucket.org closed.

结果不好:

$ ssh hg@bitbucket.org
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/home/Simon/.ssh/id_dsa' 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/Simon/.ssh/id_dsa
Permission denied (publickey).

2
使用OpenSSH for Windows(不是cygwin)我得到 chgrp Users * “C:/opscode/chef/embedded/bin/chgrp.exe”:无效组“用户”
Jonathan

0
  1. id_rsa - >右键单击 - >属性 - >安全性 - >编辑
  2. 删除所有组和用户(不要按“确定”或“应用”)
  3. 添加 - >输入您当前的用户名 - >检查名称
  4. 允许“完全控制”
  5. 应用

(Windows 10 Pro)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.