TLDR; Verwenden Sie eine verschlüsselte Netrc-Datei mit Git 1.8.3+ .
Das Speichern eines Kennworts für eine Git-Repository-HTTPS-URL ist unter Windows mit einem ~/.netrc
(Unix) oder %HOME%/_netrc
(beachten Sie das _
) möglich.
Aber : Diese Datei würde Ihr Passwort im Klartext speichern.
Lösung : Verschlüsseln Sie diese Datei mit GPG (GNU Privacy Guard) und lassen Sie Git sie jedes Mal entschlüsseln, wenn ein Kennwort erforderlich ist (für push
/ pull
/ fetch
/ clone
operation).
Hinweis: Mit Git 2.18 (Q2 2018) können Sie jetzt das GPG anpassen, mit dem die verschlüsselte .netrc
Datei entschlüsselt wird.
Siehe Commit 786ef50 , Commit f07eeed (12. Mai 2018) von Luis Marsano (``) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 017b7c5 , 30. Mai 2018)
git-credential-netrc
: gpg
Option akzeptieren
git-credential-netrc
wurde fest codiert, um mit ' gpg
' unabhängig von der Option gpg.program zu entschlüsseln .
Dies ist ein Problem bei Distributionen wie Debian, die das moderne GnuPG als etwas anderes bezeichnen, wie ' gpg2
'
Schritt-für-Schritt-Anleitung für Windows
Mit Windows:
(Git hat eine gpg.exe
in seiner Distribution, aber die Verwendung einer vollständigen GPG-Installation enthält eine gpg-agent.exe
, die Ihre Passphrase speichert, die Ihrem GPG-Schlüssel zugeordnet ist.)
Installieren Sie gpg4Win Lite
die minimale gnupg-Befehlszeilenschnittstelle (nehmen Sie die neuestegpg4win-vanilla-2.X.Y-betaZZ.exe
) und vervollständigen Sie Ihren PATH mit dem GPG-Installationsverzeichnis:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Beachten Sie den copy
Befehl ' ': Git benötigt ein Bash-Skript, um den Befehl ' gpg
' auszuführen . Da er gpg4win-vanilla-2
mitgeliefert wird gpg2.exe
, müssen Sie ihn duplizieren.)
(Stellen Sie sicher, dass Sie diesem Schlüssel eine Passphrase geben.)
Vertraue diesem Schlüssel
Installieren Sie das Hilfsskript für Anmeldeinformationen in einem Verzeichnis in Ihrem %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Achtung: Das Skript wird in Git 2.25.x / 2.26 umbenannt, siehe unten)
(Ja, dies ist ein Bash-Skript, aber es funktioniert unter Windows, da es von Git aufgerufen wird.)
(Vergessen Sie nicht den protocol
Teil ' ': ' http
' oder ' https
', abhängig von der URL, die Sie verwenden werden.)
(Sie können jetzt die Datei löschen_netrc
und nur die _netrc.gpg
verschlüsselte behalten .)
(Beachten Sie das ' /
': C:\path\to...
würde überhaupt nicht funktionieren.) (Sie können zunächst verwenden, um -v -d
zu sehen, was los ist.)
Von nun an entschlüsselt jeder Git-Befehl, der eine HTTP (S) -URL verwendet, für die eine Authentifizierung erforderlich ist, diese _netrc.gpg
Datei und verwendet das Login / Passwort, das dem Server zugeordnet ist, mit dem Sie Kontakt aufnehmen. Beim ersten Mal werden Sie von GPG nach der Passphrase Ihres GPG-Schlüssels gefragt, um die Datei zu entschlüsseln. In anderen Fällen stellt der GPG -Agent, der beim ersten GPG-Aufruf automatisch gestartet wird, diese Passphrase für Sie bereit.
Auf diese Weise können Sie mehrere URLs / Anmeldungen / Kennwörter in einer Datei speichern und verschlüsselt auf Ihrer Festplatte speichern.
Ich finde es bequemer als einen "Cache" -Helfer, bei dem Sie sich (einmal pro Sitzung) ein anderes Kennwort für jeden Ihrer Remote-Dienste merken und eingeben müssen, damit dieses Kennwort im Speicher zwischengespeichert wird.
Mit Git 2.26 (Q1 2020) wurde der Beispiel-Helfer für Anmeldeinformationen für die Verwendung .netrc
aktualisiert, damit er sofort funktioniert. Siehe Patch / Diskussion .
Siehe Commit 6579d93 , Commit 1c78c78 (20. Dezember 2019) von Denton Liu ( Denton-L
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 1fd27f8 , 25. Dezember 2019)
Unterzeichnet von: Denton Liu
Der Shebang-Pfad für den Perl-Dolmetscher git-credential-netrc
war fest codiert.
Einige Benutzer haben es jedoch möglicherweise an einem anderen Ort und müssten das Skript daher manuell bearbeiten.
Fügen Sie .perl
dem Skript ein Präfix hinzu, um es als Vorlage zu kennzeichnen, und ignorieren Sie die generierte Version.
Erweitern Sie das Makefile
so , dass es erzeugt git-credential-netrc
aus git-credential-netrc.perl
, genau wie andere Perl - Skripten.
Die Makefile-Rezepte wurden schamlos gestohlen contrib/mw-to-git/Makefile
.
Und:
Mit 2.26 (Q1 2020) wurde der Beispiel-Helfer für Anmeldeinformationen für die Verwendung von .netrc aktualisiert, damit er sofort funktioniert.
Siehe Commit 6579d93 , Commit 1c78c78 (20. Dezember 2019) von Denton Liu ( Denton-L
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 1fd27f8 , 25. Dezember 2019)
Unterzeichnet von: Denton Liu
Funktioniert derzeit git-credential-netrc
nicht außerhalb eines Git-Repositorys. Es schlägt mit folgendem Fehler fehl:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Es gibt jedoch keinen wirklichen Grund, warum Sie sich in einem Repository befinden müssen. Helfer für Anmeldeinformationen sollten auch außerhalb des Repositorys einwandfrei funktionieren können.
Rufen Sie die Nicht-Selbst-Version von auf, config()
damit sie git-credential-netrc
nicht mehr in einem Repository ausgeführt werden muss.
Jeff King ( peff
) fügt hinzu:
Ich gehe davon aus, dass Sie ein gpg-verschlüsseltes verwenden netrc
(wenn nicht, sollten Sie wahrscheinlich nur verwenden credential-store
).
Für den "schreibgeschützten" Passwortzugriff finde ich die Kombination pass
mit der folgenden Konfiguration etwas besser:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"