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?

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: //bob@code.google.com/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'


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


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

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.