Verwenden von Git durch Cygwin unter Windows 8

16

Ich habe eine Windows 8-Dev-Vorschau (nicht sicher, ob sie relevant ist, aber ich hatte noch nie Probleme mit w7) und ich versuche, ein Git-Repo von Github zu klonen.

Das Problem ist, dass meine ~ / .ssh / id_rsa 440 Berechtigungen hat und 400 sein muss. Ich habe versucht, sie zu ändern, aber alle Änderungen an den Benutzerberechtigungen schlagen sich in den Gruppenberechtigungen nieder (dh chmod 600 ergibt 660 usw.) ). Dies scheint in jeder Datei im gesamten Dateisystem konstant zu sein.

Ich habe versucht, mit den ACLs zu experimentieren, aber ohne Erfolg (vollständige Kontrolle über meinen Benutzer und Verweigerung aller, was zu 000 führte)

Hier sind ein paar Ausgaben, die helfen sollen:

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

Mir ist klar, dass ich msysgit oder etwas anderes verwenden könnte, aber ich würde es vorziehen, alles von einem einzigen Terminal aus zu erledigen

Bearbeiten: Msysgit funktioniert aus den gleichen Gründen auch nicht

9point6
quelle
Gleiches Thema hier. Windows 8 Consumer Preview.
Simon Hartcher
"Ich habe versucht, mich mit den ACLs zu beschäftigen, aber ohne Erfolg (vollständige Kontrolle über meinen Benutzer und Verweigerung aller in 000 resultierenden Benutzer) " So ls -lwerden die Berechtigungen als 000( ----------) angezeigt - aber Sie können die Datei trotzdem lesen und dies tun sshund sich git clonebeschweren darüber? Ich spekuliere, dass ich sshmich nicht über zu strenge Berechtigungen beschweren werde. Ein kurzer Blick auf den Quellcode bestätigt dies, aber ich habe es nicht getestet.
Keith Thompson

Antworten:

26

Es ist keine leere Gruppe erforderlich.

Während der Installation von cygwin gehören alle Dateien keiner Gruppe an. Sie können dies überprüfen, indem Sie einen ls -al. Sie werden sehen, dass sich keine Gruppe ("keine") in den Dateien befindet. Ändern Sie es einfach in Benutzer:

chgrp Users *

Danach kannst du chmodwas du willst.

Roi Danton
quelle
chgrp Users *ändert nur alle Dateien und Ordner in $PWD. Verwenden Sie die Option -R, um alle Unterordner / Dateien sowie $ PWD zu ändern:chgrp -R users *
adam
4

Ich habe einen Cygwin-spezifischen Hack gefunden, um das jetzt zu umgehen.

Kurzversion:
Erstellen Sie einfach eine neue leere Windows-Gruppe, ändern Sie mit chgrp die Gruppe von id_rsa in diese und verweigern Sie dann die Lese- / Schreibberechtigungen für die Gruppe.

Lange Version: Drücken Sie
die Super-Taste und geben Sie lusrmgr.msc ein . Verwenden Sie diesen Manager, um eine leere Gruppe mit dem Namen " EMPTY_GROUP" zu erstellen

Jetzt müssen wir Cygwin von dieser neuen Gruppe erzählen.

mkgroup > /etc/group

Als nächstes aktualisieren wir die Gruppe von id_rsa :

chgrp EMPTY_GROUP ~/.ssh/id_rsa

Suchen Sie schließlich im Windows Explorer nach id_rsa und verweigern Sie auf der Registerkarte Sicherheit unter Eigenschaften die Lese- / Schreibberechtigungen.

Ich bin nicht sicher, wie Cygwin in 7, aber nicht in 8 damit umgehen konnte, aber das Problem scheint von der Gruppe der id_rsa-Datei None zu herrühren, einer Gruppe, die immer vollen Lese- / Schreibzugriff hat.

Dies scheint auch nur für die mit Cygwin gelieferte Datei ssh.exe zu funktionieren. Wenn Sie also beispielsweise ssh mit git verwenden möchten, überschreiben Sie die Datei ssh.exe from bin in Ihrer Git-Installation mit der Datei aus dem Ordner bin in Ihrer Cywgin-Installation .

Daniel Stiner
quelle
2

Gewinnen Sie 8 + Cygwin

Ich bin auf Windows 8, 64bit. Folgendes löst es für mich:

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

Geben Sie in cygwin die folgenden Befehle ein:

  • Legen Sie die richtige Gruppe für den Basisordner fest:

    chgrp -Rv HomeUsers /home

  • Legen Sie die richtigen Berechtigungen für die SSH-Identitätsdateien fest:

    chmod 600 -Rv ~/.ssh/id*

NB: Die zuvor akzeptierte Antwort ist veraltet. Der Gruppenname lautet "HomeUsers", nicht "Users". Ein Kommentar ist noch nicht möglich.

Julien Ricard
quelle
1

Ich möchte auch zu diesem Thema Stellung nehmen. Ich habe ein ähnliches Problem auf meinem Windows 7-PC mit Git über Cygwin festgestellt.

Beim Versuch, Änderungen von meinem lokalen Git-Repository auf ein Remote-Repository zu übertragen (mithilfe von ssh und einem Schlüsselpaar zur Authentifizierung), gab git die Meldung aus, dass die Berechtigungen 0660 für die Datei zu offen waren

~ / .ssh / id_rsa.

Es ist natürlich in Ordnung, wenn der ssh-agent diesen offenen privaten Schlüssel ablehnt.

Also habe ich die in diesem Thread erwähnten Dinge und andere Threads ausprobiert, die mit dem Besitz und dem rwx-Muster der Datei und des ~ / .ssh-Ordners zusammenhängen

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

Derselbe Fehler wurde jedoch immer wieder ausgelöst.

Aus irgendeinem Grund musste der ssh-agent-Prozess in cygwin abgebrochen und der folgende Befehl in der bourne again-Shell (bash) ausgeführt werden.

eval `ssh-agent -s`

Vergessen Sie nicht, dem ssh-agent die gewünschte Identität hinzuzufügen, z

ssh-add ~/.ssh/id_rsa

Dann habe ich gerne einen gültigen Push-Befehl wiederholt

git push origin master

und alles hat gut funktioniert.

MichaelHuelsen
quelle
0

Um die Antwort von Roi Danton zu erweitern . Wenn Sie Windows 8 über Ihre alte Windows-Installation installiert haben und Ihr vorheriges Cygwin-Verzeichnis immer noch aktuell ist, müssen Sie zuerst einige andere Dinge tun.

Übernehmen Sie zunächst das Eigentum an den Cygwin-Verzeichnissen / -Dateien

Mit dem Verzeichnis und den Unterverzeichnissen / Dateien sind einige Benutzerkonten verknüpft, die ungefähr so ​​aussehen S-1-2-34-1234567890-1234567890-1234567890-123

Benutzerkonten

Entfernen Sie diese und übernehmen Sie den Besitz mit Ihrem eigenen Benutzerkonto.

  1. Besuchen Sie das Propertiesvon der Cygwin - Verzeichnis
  2. Klicken Sie Advancedauf die SecurityRegisterkarte
  3. Changeder Besitzer für sich. Sie können Ihren Vornamen oder die zugehörige E-Mail-Adresse eingeben
  4. Remove unbekannte Benutzer aus der Liste
  5. Klicken Enable Inheritance
  6. Aktivieren Sie das Kontrollkästchen `Alle untergeordneten Objektberechtigungseinträge durch vererbbare Berechtigungseinträge dieses Objekts ersetzen
  7. Klicken Sie OKunten und dann Yesauf das Dialogfeld.

Windows-Sicherheitsdialogfeld

Ändern Sie dann in Cygwin die Benutzergruppe aller Schlüsseldateien

Aus Roi Dantons Antwort :

Während der Installation von cygwin gehören alle Dateien keiner Gruppe an. Sie können dies überprüfen, indem Sie einen ls -al.

  1. Öffnen Sie Cygwin und navigieren Sie zum .sshVerzeichnis -cd ~/.ssh
  2. Ausführen chgrp Users *- Hiermit können Sie chmoddie Dateien ordnungsgemäß ausführen.
  3. Schließlich laufen chmod 400 *. 600 wird auch funktionieren.

Testen Sie, ob es funktioniert hat

Einfach auf den Server Ihrer Wahl ssh. In meinem Fall ist es Bitbucket .

Gutes Ergebnis:

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

Schlechtes Ergebnis:

$ 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
quelle
2
Mit OpenSSH für Windows (nicht Cygwin) bekomme ich chgrp Users * "C: /opscode/chef/embedded/bin/chgrp.exe": ungültige Gruppe "Benutzer"
Jonathan
0
  1. id_rsa -> Rechtsklick -> Eigenschaften -> Sicherheit -> Bearbeiten
  2. Alle Gruppen und Benutzer entfernen (nicht OK oder Übernehmen drücken)
  3. Hinzufügen -> Geben Sie Ihren aktuellen Benutzernamen ein -> Namen überprüfen
  4. "Vollzugriff" zulassen
  5. Anwenden

(Windows 10 Pro)

optimiertes
quelle