Używanie git przez cygwin w Windows 8

16

Mam podgląd dewelopera systemu Windows 8 (nie jestem pewien, czy to jest istotne, ale nigdy nie miałem tego problemu na w7) i próbuję sklonować repozytorium git z github.

Problem polega na tym, że mój ~ / .ssh / id_rsa ma 440 uprawnień i musi wynosić 400. Próbowałem go chmodding, ale wszelkie zmiany w uprawnieniach użytkownika znajdują odzwierciedlenie w uprawnieniach grupy (tj. Chmod 600 daje wyniki w 660 itp. ). Wydaje się, że jest stały w każdym pliku w całym systemie plików.

Próbowałem zadzierać z listami ACL, ale bezskutecznie (pełna kontrola nad moim użytkownikiem i odmawianie wszystkim skutkowało liczbą 000)

oto kilka wyników, które mogą pomóc:

$ 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'

Zdaję sobie sprawę, że mógłbym użyć msysgit lub czegoś takiego, ale wolałbym móc wszystko robić z jednego terminala

Edycja: Msysgit nie działa z tych samych powodów

9 punkt 6
źródło
Ten sam problem tutaj. Windows 8 Consumer Preview.
Simon Hartcher
„Próbowałem zadzierać z listami ACL, ale bezskutecznie (pełna kontrola nad moim użytkownikiem i odmawianie wszystkim skutkowało liczbą 000) ” Więc ls -lpokazuje uprawnienia jako 000( ----------) - ale czy nadal możesz czytać plik, robić sshi git clonenarzekać o tym? Spekuluję, że sshnie będzie narzekać, że uprawnienia wydają się zbyt surowe. Szybkie spojrzenie na kod źródłowy zwykle to potwierdza, ale nie przetestowałem tego.
Keith Thompson

Odpowiedzi:

26

Nie ma potrzeby tworzenia pustej grupy.

Podczas instalacji cygwin wszystkie pliki nie należą do żadnej grupy. Możesz to sprawdzić, wykonując ls -al. Zobaczysz, że w plikach nie ma żadnej grupy („brak”). Po prostu zmień na Użytkownicy:

chgrp Users *

Następnie możesz zrobić, chmodco chcesz.

Roi Danton
źródło
chgrp Users *zmieni tylko wszystkie pliki i foldery w $PWD. Aby zmienić wszystkie podfoldery / pliki, a także $ PWD, użyj opcji -R:chgrp -R users *
Adam
4

Znalazłem hack specyficzny dla Cygwina, aby obejść ten problem.

Krótka wersja: po
prostu utwórz nową pustą grupę okien, użyj chgrp, aby zmienić grupę id_rsa na to, a następnie odmów uprawnień do odczytu / zapisu dla grupy.

Wersja długa:
naciśnij klawisz super i wpisz lusrmgr.msc . Użyj tego menedżera, aby utworzyć pustą grupę o nazwie powiedzmy EMPTY_GROUP

Teraz musimy powiedzieć Cygwinowi o tej nowej grupie.

mkgroup > /etc/group

Następnie aktualizujemy grupę id_rsa :

chgrp EMPTY_GROUP ~/.ssh/id_rsa

Na koniec znajdź id_rsa w Eksploratorze Windows i na karcie Zabezpieczenia we Właściwościach, odmawiaj uprawnień do odczytu / zapisu, i powinieneś być .

Nie jestem pewien, jak Cygwin był w stanie poradzić sobie z tym w 7, ale nie w 8, ale problem wydaje się wynikać z tego, że grupa pliku id_rsa to None, grupa, która zawsze ma pełny dostęp do odczytu / zapisu.

Ponadto wydaje się, że działa to tylko w przypadku ssh.exe, który jest dostarczany z Cygwin, więc jeśli chcesz użyć powiedzmy ssh z git, zastąp ssh.exe z bin w instalacji git z tym z folderu bin w instalacji Cywgin .

Daniel Stiner
źródło
2

Wygraj 8 + Cygwin

Korzystam z systemu Windows 8, 64-bitowego. Wykonanie następujących czynności rozwiązuje to dla mnie:

## Start Cygwin shell
cd .ssh
chmod 600 key-file-name
gsbabil
źródło
1

W cygwin wpisz następujące polecenia:

  • Ustaw prawidłową grupę w folderze domowym:

    chgrp -Rv HomeUsers /home

  • Ustaw odpowiednie uprawnienia dla plików tożsamości ssh:

    chmod 600 -Rv ~/.ssh/id*

Uwaga: poprzednia zaakceptowana odpowiedź jest nieaktualna. Nazwa grupy to „Użytkownicy domowi”, a nie „Użytkownicy”, nie można jeszcze komentować.

Julien Ricard
źródło
1

Chciałbym również skomentować tę kwestię. Podobny problem spotkałem na moim komputerze z systemem Windows 7, używając git przez Cygwin.

Podczas próby wypchnięcia zmian z mojego lokalnego repozytorium git do zdalnego repozytorium (używając ssh i pary kluczy do uwierzytelnienia), git rzucił wiadomość, że uprawnienia 0660 były zbyt otwarte dla pliku

~ / .ssh / id_rsa.

Oczywiście ssh-agent może odrzucić ten otwarty klucz prywatny.

Próbowałem więc rzeczy wymienionych w tym wątku i innych wątkach, które były związane z własnością i wzorcem rwx pliku i folderu ~ / .ssh

chgrp Users ~/.ssh/*
chmod 400 ~/.ssh/id_rsa

Jednak ten sam błąd był zgłaszany w kółko.

Z jakiegoś powodu konieczne było zabicie procesu ssh-agent w cygwin i ponowne wykonanie następującego polecenia w powłoce Bourne'a (bash).

eval `ssh-agent -s`

Nie zapomnij dodać żądanej tożsamości do agenta ssh, np

ssh-add ~/.ssh/id_rsa

Następnie powtórzyłem prawidłowe polecenie push, takie jak

git push origin master

i wszystko działało dobrze.

MichaelHuelsen
źródło
0

Aby rozszerzyć odpowiedź Roi Dantona . Jeśli zainstalowałeś Windows 8 na starej instalacji Windows, a twój poprzedni katalog cygwin nadal jest w toku, najpierw musisz zrobić kilka innych rzeczy.

Po pierwsze, przejmij na własność katalogi / pliki Cygwin

Będzie kilka kont użytkowników powiązanych z katalogiem i podkatalogami / plikami, które wyglądają podobnie S-1-2-34-1234567890-1234567890-1234567890-123

Konta użytkowników

Usuń je i przejmij własność na własne konto użytkownika.

  1. Uzyskaj dostęp do Propertieskatalogu cygwin
  2. Kliknij Advancedna Securitykarcie
  3. Changewłaściciel do siebie. Możesz wpisać swoje imię lub powiązany adres e-mail
  4. Remove nieznani użytkownicy z listy
  5. Kliknij Enable Inheritance
  6. Zaznacz `Zastąp wszystkie wpisy uprawnień do obiektów potomnych wpisami uprawnień dziedziczonych z tego obiektu
  7. Kliknij OKna dole, a następnie Yesdo okna dialogowego.

Okno dialogowe zabezpieczeń systemu Windows

Następnie w Cygwin zmień grupę użytkowników wszystkich kluczowych plików

Z odpowiedzi Roi Dantona :

Podczas instalacji cygwin wszystkie pliki nie należą do żadnej grupy. Możesz to sprawdzić, wykonując ls -al.

  1. Otwórz Cygwin i przejdź do .sshkatalogu -cd ~/.ssh
  2. Uruchom chgrp Users *- pozwoli ci to chmodpoprawnie na pliki.
  3. Wreszcie biegnij chmod 400 *. 600 również będzie działać.

Sprawdź, czy zadziałało

Po prostu ssh na wybrany serwer. W moim przypadku jest to Bitbucket .

Dobry wynik:

$ ssh [email protected]
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.

Zły wynik:

$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         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).
Simon Hartcher
źródło
2
Z OpenSSH dla Windows (nie cygwin) dostaję chgrp Users * „C: /opscode/chef/embedded/bin/chgrp.exe”: nieprawidłowa grupa „Użytkownicy”
Jonathan
0
  1. id_rsa -> Kliknij prawym przyciskiem myszy -> Właściwości -> Bezpieczeństwo -> Edytuj
  2. Usuń wszystkie grupy i użytkowników (nie naciskaj OK ani Apply)
  3. Dodaj -> Wpisz swoją bieżącą nazwę użytkownika -> Sprawdź nazwy
  4. Zezwalaj na „pełną kontrolę”
  5. Zastosować

(Windows 10 Pro)

optymierty
źródło