Git - Verwendung der .netrc-Datei unter Windows zum Speichern von Benutzer und Kennwort

172

Ist es möglich, eine .netrc-Datei unter Windows zu verwenden, wenn ich Git verwende, um ein Remote-Repository mit HTTP und Benutzerpasswort zu klonen?

Bernd Klaus
quelle

Antworten:

203

Ist es möglich, eine .netrcDatei unter Windows zu verwenden?

Ja, du musst:

  • Umgebungsvariable definieren %HOME% (vor Git 2.0, wird mit Git 2.0+ nicht mehr benötigt)
  • Legen Sie eine _netrcDatei ein%HOME%

Wenn Sie Windows 7/10 verwenden, geben Sie in einer CMDSitzung Folgendes ein :

setx HOME %USERPROFILE%

und das %HOME%wird auf ' C:\Users\"username"' gesetzt.
Gehen Sie in diesen Ordner ( cd %HOME%) und erstellen Sie eine Datei mit dem Namen ' _netrc'

Hinweis: Für Windows benötigen Sie erneut eine ' _netrc' Datei, keine ' .netrc' Datei.

Der Inhalt ist Standard (Ersetzen Sie den <examples>durch Ihre Werte):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Luke erwähnt in den Kommentaren:

Mit der neuesten Version von msysgit unter Windows 7 musste ich die HOMEUmgebungsvariable nicht festlegen . Die _netrcDatei allein hat es geschafft.

Dies ist in der Tat das, was ich in " Versuch," install"Github, .sshdir nicht da " erwähnt habe:
git-cmd.batIn msysgit enthalten setzt die %HOME%Umgebungsvariable:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 glaubt an die Kommentare, dass "es scheint, dass es für das http-Protokoll nicht funktioniert"

Ich habe jedoch geantwortet, dass netrcdas curlHTTP-Protokoll verwendet wird und für dieses funktioniert, wie in diesem Beispiel gezeigt (suchen Sie auf netrcder Seite nach ' ') :. Wird hier auch mit dem HTTP-Protokoll verwendet: " _netrc/ .netrcalternative tocURL ".


Eine gemeinsame Falle mit mit netrc Unterstützung unter Windows ist, dass Git die Verwendung umgeht, wenn eine ursprüngliche https-URL einen Benutzernamen angibt.

Zum Beispiel, wenn Ihr .git/config Datei enthält:

[entfernter "Ursprung"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //[email protected]/p/my-project/

Git wird Ihre Anmeldeinformationen nicht über auflösen. _netrcUm dies zu beheben, entfernen Sie Ihren Benutzernamen wie folgt :

[entfernter "Ursprung"]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Alternative Lösung: Mit Git-Version 1.7.9+ (Januar 2012): Diese Antwort von Mark Longair beschreibt den Cache-Mechanismus für Anmeldeinformationen, mit dem Sie Ihr Kennwort auch nicht wie unten gezeigt im Klartext speichern können.


Mit Git 1.8.3 (April 2013):

Sie können jetzt eine verschlüsselte .netrc (mit gpg) verwenden.
Unter Windows: %HOME%/_netrc( _, nicht ' .')

Ein neuer schreibgeschützter Helfer für Anmeldeinformationen (in contrib/) für die Interaktion mit den .netrc/.authinfoDateien wurde hinzugefügt.

Mit diesem Skript können Sie GPG-verschlüsselte Netrc-Dateien verwenden , um das Problem zu vermeiden, dass Ihre Anmeldeinformationen in einer Nur- Text-Datei gespeichert werden.

Dateien mit der .gpgErweiterung werden vor dem Parsen von GPG entschlüsselt.
Mehrere -fArgumente sind in Ordnung. Sie werden der Reihe nach verarbeitet, und der erste gefundene übereinstimmende Eintrag wird über das Hilfsprotokoll für Anmeldeinformationen zurückgegeben.

Wenn keine -fOption angegeben ist .authinfo.gpg, .netrc.gpgwerden .authinfo,,, und .netrcDateien in Ihrem Home-Verzeichnis in dieser Reihenfolge verwendet.

So aktivieren Sie diesen Anmeldeinformations-Helfer:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Beachten Sie, dass Git git-credential-dem Namen des Helfers " " voranstellt und im Pfad danach sucht.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Ein vollständiges Beispiel finden Sie unter " Gibt es eine Möglichkeit, die Kennworteingabe bei Verwendung zu überspringen?https:// github "


Mit Git 2.18+ (Juni 2018) können Sie jetzt das GPG-Programm anpassen, mit dem die verschlüsselte .netrcDatei 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: gpgOption akzeptieren

git-credential-netrcwurde 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'

VonC
quelle
@Bernd: Die HOMEUmgebungsvariable ist wichtig, da sie unter Windows nicht standardmäßig definiert ist. Sie können diese Variable auf ein beliebiges Verzeichnis einstellen (es muss nicht sein C:\users\mylogin): Bei der Arbeit habe ich sie beispielsweise auf meine private Remote-Festplatte festgelegt, die meinem Windows-Konto zugeordnet ist, sodass ich Desktops wechseln kann, ohne verlieren zu müssen meine .sshoder _netrcEinstellungen.
VonC
@Bernd: Überprüfen Sie auch, ob sich Ihr Git-Repo auf einem LAN- oder WAN-Server (Internet) befindet. Möglicherweise müssen Sie http.proxyin Ihrer Umgebung Variablen definieren. Oder im Gegenteil, Sie fügen Ihren Server einer no_proxyVariablen hinzu, um zu vermeiden, dass Sie versuchen, über WAN auf einen LAN-Server zuzugreifen.
VonC
Wie lautet der Name und der Wert für die Umgebungsvariable? Könnten Sie etwas genauer sein VonC
Dennis D
@DennisD: Die beiden Umgebungsvariablen, über die ich in der Antwort und in den Kommentaren spreche, sind HOME und http_proxy. HOME verweist auf jedes gewünschte Verzeichnis. http_proxy verweist auf die Proxy-Adresse, falls Sie eine haben.
VonC
Mit der neuesten Version von msysgitWindows 7 musste ich die HOMEUmgebungsvariable nicht festlegen . Die _netrcDatei allein hat es geschafft.
Luke
35

Sie können den Git Credential Manager für Windows auch installieren , um Git-Kennwörter anstelle des Windows Credentials Manager zu speichern _netrc. Dies ist eine sicherere Methode zum Speichern von Kennwörtern.

KindDragon
quelle
8
Tolle Antwort, dies ist die einzige Antwort, die ich gefunden habe, mit der ich die Einfachheit von Benutzername / Passwort (sicher) beibehalten kann, ohne mich mit all dem SSH-Mist befassen zu müssen.
Kirk Woll
@KirkWoll siehe meine Update-Antwort oben: Sie können Ihre Anmeldeinformationen jetzt in einer verschlüsselten .netrcDatei speichern. Sie müssen diese Anmeldeinformationen nicht einmal während der Sitzung eingeben.
VonC
11

Dadurch kann sich Git unter HTTPS authentifizieren mit .netrc:

  • Die Datei sollte benannt sein _netrcund sich in befinden c:\Users\<username>.
  • Sie müssen eine Umgebungsvariable mit dem Namen HOME=%USERPROFILE%festlegen (systemweite Umgebungsvariablen mithilfe der Option System in der Systemsteuerung festlegen. Abhängig von der Windows-Version müssen Sie möglicherweise "Erweiterte Optionen" auswählen.).
  • Das in der _netrcDatei gespeicherte Kennwort darf keine Leerzeichen enthalten (das Angeben des Kennworts funktioniert nicht).
EBlake
quelle
Einfachste und beste Lösung. Funktionierte wie ein Zauber mit Android Studio, Source Tree und Git-Befehlszeile. Ich musste dies verwenden, als die von Google empfohlene Option "Cloud SDK credential.helper" fehlschlug und manuell Anmeldeinformationen generieren und mit der Netz-RC-Datei verwenden musste. In meinem Fall brauchte ich keine Option 2 und 3.
Hari
1

Ich veröffentliche eine Möglichkeit zum _netrcHerunterladen von Materialien von der Website www.course.com.

Wenn jemand das coursera-dl verwenden möchte, um die Materialien der offenen Klasse auf www.coursera.com herunterzuladen, und unter dem Windows-Betriebssystem möchte jemand eine Datei wie ".netrc" verwenden, die sich unter einem Unix-Betriebssystem befindet, um das hinzuzufügen Option -nstatt -U <username> -P <password>für die Bequemlichkeit. Er / sie kann es so machen:

  1. Überprüfen Sie den Home-Pfad unter Windows: setx HOME %USERPROFILE%(siehe Antwort von VonC ). Die HOMEUmgebungsvariable wird als gespeichert C:\Users\"username".

  2. Suchen Sie im Verzeichnis C:\Users\"username"und erstellen Sie einen Dateinamen _netrc. HINWEIS: Es gibt KEIN Suffix. Der Inhalt ist wie folgt:machine coursera-dl login <user> password <pass>

  3. Verwenden Sie einen Befehl coursera-dl -n --path PATH <course name>, um die Klassenmaterialien herunterzuladen. Weitere Details zu coursera-dl-Optionen für diese Seite .

BO.LI
quelle