Vor kurzem war ich nicht in der Lage, Github zu klonen oder zu pushen, und ich versuche, die Grundursache zu finden.
Dies ist auf Windows
Ich habe Cygwin + Git sowie Msysgit.
Msysgit wurde mit folgenden Optionen installiert:
- OpenSSH
- Verwenden Sie Git über die Windows-Eingabeaufforderung
Das gibt mir 4 Umgebungen, in denen ich versuchen kann, Git zu verwenden:
- Windows-Cmd-Eingabeaufforderung
- Power Shell
- Git Bash
- Cygwin
Irgendwie habe ich es geschafft, mich in eine Position zu bringen, in der beim Versuch, ein Repository mit msysgit, cmd.exe oder Powershell zu klonen, die folgende Fehlermeldung angezeigt wird:
> Initialized empty Git repository in
> C:/sandbox/SomeProject/.git/
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions 0644 for
> '/c/Users/Ben/.ssh/id_rsa' are too
> open. It is recommended that your
> private key files are NOT accessible
> by others. This private key will be
> ignored. bad permissions: ignore key:
> /c/Users/Ben/.ssh/id_rsa Permission
> denied (publickey). fatal: The remote
> end hung up unexpectedly
Hierbei wird der Ordner .ssh in meinem Ordner c: \ users \ ben \ verwendet, der von msysgit verwendet wird. Ich vermute, dass Cygwin funktioniert, weil sich der .ssh-Ordner an einer anderen Stelle befindet, aber ich bin mir nicht sicher, warum
In Git Bash überprüfe ich die Berechtigungen:
$ ls -l -a ~/.ssh
Welches gibt mir:
drwxr-xr-x 2 Ben Administ 0 Oct 12 13:09 .
drwxr-xr-x 34 Ben Administ 8192 Oct 12 13:15 ..
-rw-r--r-- 1 Ben Administ 1743 Oct 12 12:36 id_rsa
-rw-r--r-- 1 Ben Administ 399 Oct 12 12:36 id_rsa.pub
-rw-r--r-- 1 Ben Administ 407 Oct 12 13:09 known_hosts
Diese Berechtigungen sind anscheinend zu entspannt. Wie sie so gekommen sind, weiß ich nicht.
Ich kann versuchen, sie zu ändern ...
$ chmod -v -R 600 ~/.ssh
was mir sagt:
mode of `.ssh' changed to 0600 (rw-------)
mode of `.ssh/id_rsa' changed to 0600 (rw-------)
mode of `.ssh/id_rsa.pub' changed to 0600 (rw-------)
mode of `.ssh/known_hosts' changed to 0600 (rw-------)
Aber es scheint keine Wirkung zu haben. Ich bekomme immer noch den gleichen Fehler und tue es
$ ls -l -a ~/.ssh
liefert die gleichen Berechtigungen wie zuvor.
AKTUALISIEREN:
Ich habe versucht, die Berechtigungen für diese Dateien in cygwin zu korrigieren, und cygwin meldet ihre Berechtigungen korrekt. Gitbash funktioniert nicht: alt text http://cdn.cloudfiles.mosso.com/c54102/app7962031255448924.jpg
Irgendwelche Ideen, wie ich diese Berechtigungen wirklich reparieren kann?
Antworten:
Sie haben die Berechtigungen für das gesamte Verzeichnis geändert. Ich bin damit einverstanden, dass Splash eine schlechte Idee ist. Wenn Sie sich an die ursprünglichen Berechtigungen für das Verzeichnis erinnern können, würde ich versuchen, sie darauf zurückzusetzen und dann die folgenden Schritte auszuführen
im .ssh-Ordner. Dadurch wird die Datei id_rsa nur für den Eigentümer (Sie) auf rwx (Lesen, Schreiben, Ausführen) und für alle anderen auf Null gesetzt.
Wenn Sie sich nicht an die ursprünglichen Einstellungen erinnern können, fügen Sie einen neuen Benutzer hinzu und erstellen Sie einen Satz SSH-Schlüssel für diesen Benutzer. Erstellen Sie daher einen neuen .ssh-Ordner mit Standardberechtigungen. Sie können diesen neuen .ssh-Ordner als Referenz für Berechtigungen zum Zurücksetzen Ihres .ssh-Ordners und Ihrer Dateien verwenden.
Wenn das nicht funktioniert, würde ich versuchen, msysgit zu deinstallieren, ALLE .ssh-Ordner auf dem Computer zu löschen (nur aus Sicherheitsgründen), dann msysgit mit den gewünschten Einstellungen neu zu installieren und erneut von vorne zu beginnen (obwohl ich glaube, Sie haben es mir gesagt du hast es schon versucht).
Bearbeitet: Habe auch gerade diesen Link über Google gefunden - Fixing "WARNUNG: UNGESCHÜTZTE PRIVATE SCHLÜSSELDATEI!" unter Linux Obwohl es auf Linux ausgerichtet ist, kann es hilfreich sein, da es sich um Liunx-Berechtigungen und dergleichen handelt.
quelle
-rwx------
. Was Sie also anzeigen, ist nicht korrekt, wenn Sie den Befehl chmod korrekt ausgeführt haben.Es gibt einen Fehler mit Cygwins chmod, siehe:
/superuser/397288/using-cygwin-in-windows-8-chmod-600-does-not-work-as-expected
quelle
None
. (Ich nehme an, dies ist eine Standardprozedur, wenn eine Gruppe nicht explizit definiert wurde.) Diese Änderung an einer expliziten GruppeUsers
erlaubte Cygwin angeblich, die Berechtigungen zu trennen, und ich konnte schließlich 600 anstelle einer automatischen 660 festlegen.chmod 600
beschwerte ich mich bei der Verwendung von git, dass meine Berechtigungen noch vorhanden waren0660
. Durch das Korrigieren des Gruppenbesitzes wird Chown korrekt angewendet.Für * nix-Systeme ist die offensichtliche Lösung
chmod 600 id_rsa
ofc, aber unter Windows 7 musste ich meinen Kopf eine Weile gegen die Wand schlagen, aber dann fand ich die magische Lösung:Gehen Sie zu Arbeitsplatz / Rechtsklick / Eigenschaften / Erweiterte Systemeinstellungen / Umgebungsvariablen und LÖSCHEN Sie die Variable (möglicherweise sowohl aus der System- als auch aus der Benutzerumgebung):
CYGWIN
Grundsätzlich ist es ein Fehler in mingw32, der von Git Windows Binary verwendet wird, da immer alle Dateien 644 und alle Ordner 755 angezeigt werden. Das Entfernen der Umgebungsvariablen ändert dieses Verhalten nicht, weist ssh.exe jedoch anscheinend an, das Problem zu ignorieren. Wenn Sie über die Sicherheitseinstellungen des Explorers die richtigen Berechtigungen für Ihre id_rsa festlegen (es ist wirklich nicht erforderlich, dass ein anderer Benutzer als Ihr eigener Benutzer vorhanden ist, nicht "jeder", nicht "Administratoren", nicht "System". Keiner. Nur Sie). Sie werden immer noch sicher sein.
Nun, warum mingw32, ein anderes System als Cygwin, würde jede Verwendung der CYGWIN Umgebungsvariable, ist mir schleierhaft . Sieht für mich wie ein Käfer aus.
quelle
Ich bin auf XP und dies erlaubte Git Bash, mit Github zu kommunizieren (nach viel Frust):
c:\cygwin\bin\cyg*
(~ 50 Dateien) nachc:\Program Files\Git\bin\
c:\cygwin\bin\ssh.exe
nachc:\Program Files\Git\bin\
(überschreiben)Erstellen Sie die Datei
c:\Documents and Settings\<username>\.ssh\config
mit:(optional) Verwenden Sie diese Option
ssh -v git@github
, um das Debuggen der Verbindung anzuzeigen.Hintergrund: Das allgemeine Problem ist eine Kombination dieser beiden:
quelle
c:\Documents and Settings\<username>\.ssh\config
da Sie ersetztc:\Program Files\Git\bin\ssh.exe
mitc:\cygwin\bin\ssh.exe
. Richtig ?LogLevel DEBUG
der Datei .ssh \ config hinzu, um die Debug-Ausgabe des von git.exe gestarteten Prozesses ssh.exe zu erhalten.Für Windows 7 mit dem hier gefundenen Git (es verwendet MinGW, nicht Cygwin):
quelle
OK, hier ist, wie ich die Änderung meiner Windows-Dateien in Bezug auf die Berechtigungen selbst unter Win7 erzwungen habe: Suchen Sie Ihren SSH-Schlüssel im Windows Explorer: C: \ Users [Ihr_Benutzername_hier] .ssh \ id_rsa
Klicken Sie mit der rechten Maustaste auf Datei> Eigenschaften> Registerkarte Sicherheit> Schaltfläche Erweitert> Berechtigungen ändern
Entfernen Sie nun alle Personen, die nicht Ihr Benutzername sind. Dies schließt Administrator- und Systembenutzer ein. An dieser Stelle erhalten Sie möglicherweise einen Dialog über das Erben von Berechtigungen. Wählen Sie die Option, die NICHT erbt, da wir nur diese Datei ändern möchten.
Klicken Sie auf OK und speichern Sie bis zum Abschluss.
Ich habe tagelang damit gekämpft, weil meine Fenster die Dateiberechtigungen über die Befehlszeile nicht ändern würden. Auf diese Weise wird es auch WIRKLICH gemacht - anstatt aufregende Workarounds zu verwenden, die seltsame Konsequenzen haben können.
quelle
Das Ändern der Dateiberechtigungen von Eigenschaften, das Deaktivieren der Vererbung und das Ausführen von chmod 400 hat bei mir nicht funktioniert. Die Berechtigungen für meine private Schlüsseldatei waren:
Dann bemerkte ich, dass die Gruppe Keine war, also rannte ich einfach
Dann konnte ich die Berechtigungen mit chmod 400 erfolgreich ändern und einen Git-Push ausführen.
quelle
FÜR MAC-BENUTZER:
Ändern Sie die Einstellungen Ihrer Schlüsselpaardatei, indem Sie dies im Terminal eingeben:
(Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden oder dass der Dateiname im Befehl korrekt ist).
quelle
Ich löse es laufend:
Ich hoffe zu helfen. Viel Glück.
quelle
Nachdem ich kürzlich auf das Problem gestoßen war und dies eines der besten Google-Ergebnisse war, dachte ich, ich würde mich mit einer einfachen Problemumgehung einmischen, die in der Diskussion hier dokumentiert ist: http://code.google.com/p/msysgit/issues/detail?id = 261 # c40
Sie müssen lediglich die mysys ssh.exe mit Ihrer cygwin ssh.exe überschreiben
quelle
Ich hatte vor kurzem das gleiche Problem unter Windows XP. Ich habe versucht, 700 in meiner ~ / .ssh / id_rsa-Datei zu ändern, aber es schien nicht zu funktionieren. Als ich mir die Berechtigungen mit ls -l für ~ / .ssh / id_rsa ansah, konnte ich feststellen, dass meine effektiven Berechtigungen immer noch 644 waren.
Dann erinnerte ich mich, dass Windows-Berechtigungen auch Berechtigungen von den Ordnern erben und der Ordner immer noch für alle geöffnet war. Eine Lösung könnte darin bestehen, Berechtigungen für den Ordner festzulegen, aber ich denke, ein besserer Weg wäre, das System anzuweisen, die Vererbung für diese Datei zu ignorieren. Dies kann mithilfe der erweiterten Option auf der Registerkarte Sicherheit in den Eigenschaften der Datei erfolgen und das Kontrollkästchen "Von übergeordneten Berechtigungen erben ..." deaktiviert ist.
Dies kann für andere mit demselben Problem hilfreich sein.
quelle
Ich spiele gerade mit Git 1.6.5 und kann Ihr Setup nicht replizieren:
chmod ändert auch die Dateiberechtigungen für meine Schlüssel nicht.
Umgebung:
Update: Git 1.6.5.1 funktioniert auch.
quelle
Dies ist ein besonders problematisches Problem unter Windows, bei dem es nicht ausreicht, nur die Dateien korrekt zu ändern. Sie müssen Ihre Umgebung einrichten.
Unter Windows hat das bei mir funktioniert:
Installieren Sie cygwin.
Ersetzen Sie die msysgit ssh.exe durch die ssh.exe von cygwin.
Mit cygwin bash chmod 600 die private Schlüsseldatei, die für mich "id_rsa" war.
Wenn es immer noch nicht funktioniert, gehen Sie zu Systemsteuerung -> Systemeigenschaften -> Erweitert -> Umgebungsvariablen und fügen Sie die folgende Umgebungsvariable hinzu. Wiederholen Sie dann Schritt 3.
Variabler Wert
CYGWIN sbmntsec
quelle
Ich konnte dies beheben, indem ich zwei Dinge tat, obwohl Sie möglicherweise nicht Schritt 1 tun müssen.
Kopieren Sie von cygwin ssh.exe und allen cyg * .dll in das bin-Verzeichnis von Git (dies ist möglicherweise nicht erforderlich, aber es ist ein Schritt, den ich unternommen habe, aber dies allein hat die Dinge nicht behoben).
Befolgen Sie die Schritte von: http://zylstra.wordpress.com/2008/08/29/overcome-herokus-permission-denied-publickey-problem/
Ich habe meiner ~ / .ssh / config-Datei einige Details hinzugefügt:
Host heroku.com
Hostname heroku.com
Port 22
IdentitätenNur ja
IdentityFile ~ / .ssh / id_heroku
TCPKeepAlive yes
User brandon
Ich musste User als meine E-Mail-Adresse für heroku.com verwenden. Hinweis: Dies bedeutet, dass Sie einen Schlüssel erstellen müssen. Ich habe diesen befolgt, um den Schlüssel zu erstellen. Wenn Sie zur Eingabe des Schlüsselnamens aufgefordert werden, müssen Sie id_heroku http: / angeben /help.github.com/win-set-up-git/
Fügen Sie dann den Schlüssel hinzu: heroku keys: add ~ / .ssh / id_heroku.pub
quelle
Der Trick für mich war, die CYGWIN- Umgebungsvariable mit " tty nodosfilewarning " zu aktualisieren . Ich musste nicht einmal den Schlüssel ändern.
quelle
Keine direkte Antwort auf die Hauptfrage, sondern auf Ihre Frage, wie der Ordner von cygwin funktioniert ... In der Regel stellt cygwin alle "Ihre" Dateien unter das Äquivalent von c: \ cygwin \ home \ username. Dieser Ordner wird für benutzerspezifische Einstellungen und nicht für das Windows-Benutzerverzeichnis behandelt.
quelle
Sofern es keinen Grund gibt, warum Sie dieses private / öffentliche Schlüsselpaar (id_rsa / id_rsa.pub) behalten oder Ihren Kopf gerne an die Wand schlagen möchten, würde ich empfehlen, sie nur neu zu erstellen und Ihren öffentlichen Schlüssel auf github zu aktualisieren.
Erstellen Sie zunächst eine Sicherungskopie Ihres Verzeichnisses ~ / .ssh.
Geben Sie Folgendes ein und antworten Sie mit "y", ob Sie die vorhandenen Dateien überschreiben möchten.
Kopieren Sie den Inhalt des öffentlichen Schlüssels in Ihre Zwischenablage. (Im Folgenden erfahren Sie, wie Sie dies auf einem Mac tun sollten.)
Gehen Sie zu Ihrem Github-Konto und fügen Sie diesen Schlüssel hinzu.
Beenden Sie Ihr Terminal und starten Sie ein neues neu.
Wenn Sie sinnlose Fehlermeldungen wie "Geben Sie Ihr Passwort ein" für Ihren öffentlichen Schlüssel erhalten, wenn Sie noch nie einen eingegeben haben, ziehen Sie diese Technik des Neustarts in Betracht. Wie Sie oben sehen, ist es nicht kompliziert.
quelle
Ich habe es nie geschafft, dass git in Powershell komplett funktioniert. Aber in der Git-Bash-Shell hatte ich keine Probleme mit Berechtigungen, und ich musste chmod usw. nicht einstellen. Nachdem ich das ssh zu Github hinzugefügt hatte, war ich betriebsbereit.
quelle
Typ am Terminal:
Und versuche es erneut.
quelle
Haben Sie die Schlüsseldatei von einem anderen Computer kopiert?
Ich habe gerade eine
id_rsa
Datei auf dem Client-Computer erstellt und dann den gewünschten Schlüssel eingefügt. Keine Berechtigungsprobleme. Nichts zu setzen. Es hat einfach funktioniert. Es funktioniert auch, wenn Sie PuTTYgen verwenden, um den privaten Schlüssel zu erstellen.Möglicherweise ein Problem mit versteckten Gruppen, wenn Sie es von einem anderen Computer kopieren.
Getestet auf zwei Windows 8.1-Computern. Verwenden von Sublime Text 3 zum Kopieren und Einfügen des privaten Schlüssels. Verwenden von Git Bash (Git-1.9.4-Preview20140611).
quelle
Nachdem ich meine Cygwin-Installation um Februar 2015 (
1.7.34(0.285/5/3) 2015-02-04 12:14 x86_64 Cygwin
) auf eine Version aktualisiert hatte , stieß ich plötzlich auf dieUNPROTECTED PRIVATE KEY FILE
Warnung.Ich habe dieses Problem behoben, nachdem ich den folgenden Befehl ausgeführt habe:
(Eine andere Antwort auf eine andere Frage gibt mehr Kontext)
quelle
@ kobys Antwort funktioniert bei mir nicht, also nehme ich eine kleine Änderung vor.
Das funktioniert gut für mich auf dem Mac.
quelle
Ich hatte das gleiche Problem unter Windows 10, bei dem ich versuchte, SSH in eine Vagrant-Box zu integrieren. Dies scheint ein Fehler in der alten OpenSSH-Version zu sein. Was hat bei mir funktioniert:
(Beachten Sie die ".exe", wenn Sie Powershell verwenden.)
Sie könnten etwas sehen wie:
Beachten Sie, dass im obigen Beispiel das neueste OpenSSH an zweiter Stelle im Pfad steht, sodass es nicht ausgeführt wird.
So ändern Sie die Reihenfolge:
quelle
Mein System ist ein bisschen durcheinander mit bash / cygwin / git / msysgit / vielleicht-mehr ...
chmod
hatte keine Auswirkung auf den Schlüssel oder dieconfig
Datei.Dann habe ich beschlossen, es von Windows aus zu erreichen, was funktioniert hat.
Properties
.Security
Registerkarte.Advanced
unten.Change
nebenOwner
oben auf.Check Names
dann aufOK
.Permission entries:
Markieren Sie jeden Benutzer, der nicht „My-Super-Benutzername“ ist, und wählen SieRemove
. Wiederholen Sie diesen Vorgang, bis nur noch "My-Awesome-Username" übrig ist.Edit
unten.Type:
oben eingestellt istAllow
, und aktivieren Sie das Kontrollkästchen nebenFull control
.Hit
OK
,Apply
,OK
,OK
.Probieren Sie es jetzt noch einmal aus ...
Scheint, dass der Mock-Bash manchmal den Dateibesitz nicht kontrollieren kann. Es ist besonders seltsam, da es aus einem Mock-Bash-Skript generiert wird. Stelle dir das vor.
quelle
Keine der hier vorgeschlagenen Problemumgehungen (chmod / chgrp / setfacl / windows perms) funktionierte für mich mit msys64 auf einer Windows 7-Unternehmens-VM. Am Ende habe ich das Problem umgangen, indem ich einen SSH-Agenten mit dem auf stdin bereitgestellten Schlüssel verwendet habe. Wenn Sie dies zu meinem hinzufügen,
.bash_profile
wird es zum Standard für mein Login:Jetzt kann ich mit SSH-Fernbedienungen Git Push und Pull machen.
quelle