Git - Jak używać pliku .netrc w systemie Windows, aby zapisać użytkownika i hasło

172

Czy jest możliwe użycie pliku .netrc w systemie Windows, gdy używam Git do klonowania zdalnego repozytorium za pomocą protokołu HTTP i hasła użytkownika?

Bernd Klaus
źródło

Odpowiedzi:

203

Czy można użyć .netrcpliku w systemie Windows?

Tak musisz:

  • zdefiniuj zmienną środowiskową %HOME%(przed Git 2.0, nie jest już potrzebna z Git 2.0+)
  • umieść _netrcplik%HOME%

Jeśli używasz systemu Windows 7/10, w CMDsesji wpisz:

setx HOME %USERPROFILE%

a %HOME%testament zostanie ustawiony na „ C:\Users\"username"”.
Przejdź do tego folderu ( cd %HOME%) i utwórz plik o nazwie „ _netrc

Uwaga: ponownie, w przypadku systemu Windows potrzebujesz _netrcpliku „ ”, a nie.netrc”.

Jego zawartość jest dość standardowa (zamień na <examples>swoje wartości):

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

Łukasz wspomina w komentarzach:

Korzystając z najnowszej wersji msysgit na Windows 7, nie musiałem ustawiać HOMEzmiennej środowiskowej. Sam _netrcplik załatwił sprawę.

To jest rzeczywiście to, o czym wspomniałem w " Próbowaniu" install"github, .sshnie
git-cmd.bat ma katalogu ": zawarte w msysgit ustawia %HOME%zmienną środowiskową:

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

爱国者 uważa w komentarzach, że „wygląda na to, że nie będzie działać dla protokołu http”

Odpowiedziałem jednak, że netrcjest używany przez curlprotokół HTTP i działa z nim, jak pokazano w tym przykładzie (poszukaj znaku „ netrc” na stronie):. Używany również z protokołem HTTP tutaj: „ _netrc/ .netrcalternatywa dlacURL ”.


Częstą pułapką z netrcobsługą w systemie Windows jest to, że git pominie jego użycie, jeśli adres URL pochodzenia https określa nazwę użytkownika.

Na przykład, jeśli twój .git/configplik zawiera:

[zdalne „źródło”]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //[email protected]/p/my-project/

Git nie rozwiąże twoich poświadczeń przez _netrc, aby naprawić ten problem, usuń twoją nazwę użytkownika, na przykład:

[zdalne „źródło”]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Alternatywne rozwiązanie: W przypadku git w wersji 1.7.9+ (styczeń 2012): Ta odpowiedź od Marka Longaira szczegółowo opisuje mechanizm pamięci podręcznej poświadczeń, który pozwala również nie przechowywać hasła w postaci zwykłego tekstu, jak pokazano poniżej.


Z Git 1.8.3 (kwiecień 2013):

Możesz teraz użyć zaszyfrowanego pliku .netrc (z gpg).
W systemie Windows: %HOME%/_netrc( _zamiast „ .”)

Dodano nowy pomocnik poświadczeń tylko do odczytu (in contrib/) do interakcji z .netrc/.authinfoplikami.

Ten skrypt pozwoliłby ci na użycie plików netrc zaszyfrowanych gpg , unikając problemu z przechowywaniem twoich poświadczeń w zwykłym pliku tekstowym.

Pliki z .gpgrozszerzeniem zostaną odszyfrowane przez GPG przed przetworzeniem.
Wiele -fargumentów jest OK. Są one przetwarzane w kolejności, a pierwszy znaleziony pasujący wpis jest zwracany za pośrednictwem protokołu pomocnika poświadczeń.

Gdy nie -fpodano opcję, .authinfo.gpg, .netrc.gpg, .authinfo, oraz .netrcpliki w katalogu domowym są wykorzystywane w tym celu.

Aby włączyć tego pomocnika poświadczeń:

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

(Zauważ, że Git doda znak „ git-credential-” do nazwy pomocnika i poszuka go w ścieżce).

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

Zobacz pełny przykład w sekcji „ Czy istnieje sposób na pominięcie wpisywania hasła podczas używaniahttps:// github


Dzięki Git 2.18+ (czerwiec 2018) możesz teraz dostosować program GPG używany do odszyfrowania zaszyfrowanego .netrcpliku.

Zobacz commit 786ef50 , commit f07eeed (12 maja 2018) autorstwa Luisa Marsano (``) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 017b7c5 , 30 maja 2018 r.)

git-credential-netrc: akceptacja gpgopcji

git-credential-netrczostał zakodowany na sztywno do odszyfrowania za pomocą „ gpg” niezależnie od opcji gpg.program.
Jest to problem w dystrybucjach takich jak Debian, które nazywają nowoczesne GnuPG czymś innym, na przykład ' gpg2'

VonC
źródło
@Bernd: HOMEzmienna środowiskowa jest ważna, ponieważ nie jest zdefiniowana domyślnie w systemie Windows. Możesz ustawić tę zmienną na dowolny katalog, który chcesz (nie musi C:\users\mylogin): na przykład w pracy ustawiłem ją na mój prywatny dysk zdalny powiązany z moim kontem Windows, co pozwala mi przełączać pulpity bez konieczności utraty moje .sshlub _netrcustawienia.
VonC
@Bernd: sprawdź również, czy Twoje repozytorium Git znajduje się na serwerze LAN lub WAN (internet). Może być konieczne zdefiniowanie http.proxyzmiennych środowiskowych. Lub wręcz przeciwnie, aby dodać serwer do no_proxyzmiennej, aby uniknąć prób uzyskania dostępu do serwera LAN przez WAN.
VonC
Jaka jest nazwa i wartość zmiennej środowiskowej? Czy mógłbyś być trochę bardziej konkretny? VonC
Dennis D
@DennisD: dwie zmienne środowiskowe, o których mówię w odpowiedzi i komentarzach, to HOME i http_proxy. HOME odniesie się do dowolnego katalogu, który chcesz. http_proxy odniesie się do adresu proxy, jeśli taki masz.
VonC
Korzystając z najnowszej wersji msysgitw systemie Windows 7, nie musiałem ustawiać HOMEzmiennej środowiskowej. Sam _netrcplik załatwił sprawę.
Łukasz
35

Możesz także zainstalować Git Credential Manager dla Windows, aby zamiast tego zapisywać hasła Git w menedżerze poświadczeń systemu Windows _netrc. Jest to bezpieczniejszy sposób przechowywania haseł.

KindDragon
źródło
8
Świetna odpowiedź, to jedyna odpowiedź, jaką znalazłem, która pozwala mi zachować prostotę nazwy użytkownika / hasła (bezpiecznie) bez konieczności radzenia sobie z całym tym bzdurnym SSH.
Kirk Woll,
@KirkWoll zobacz moją odpowiedź dotyczącą aktualizacji powyżej: możesz teraz przechowywać swoje poświadczenia w zaszyfrowanym .netrcpliku. Nie będziesz musiał wprowadzać tych danych uwierzytelniających ani razu podczas sesji.
VonC,
11

Pozwoli to Git na uwierzytelnianie przez HTTPS przy użyciu .netrc:

  • Plik powinien mieć nazwę _netrci znajdować się w c:\Users\<username>.
  • Konieczne będzie ustawienie zmiennej środowiskowej o nazwie HOME=%USERPROFILE%(ustaw zmienne środowiskowe dla całego systemu za pomocą opcji System w panelu sterowania. W zależności od wersji systemu Windows może być konieczne wybranie opcji „Opcje zaawansowane”).
  • Hasło zapisane w _netrcpliku nie może zawierać spacji (cytowanie hasła nie zadziała).
EBlake
źródło
Najprostsze i najlepsze rozwiązanie. Działał jak urok z Android Studio, drzewem źródłowym i wierszem poleceń Git. Musiałem tego użyć, gdy zalecana przez Google opcja credential.helper Cloud SDK nie powiodła się i musiałem ręcznie wygenerować poświadczenia i użyć go z plikiem net rc. W moim przypadku nie potrzebowałem opcji 2 i 3.
Hari
1

_netrcZamieszczam sposób wykorzystania do pobrania materiałów z serwisu www.course.com.

Jeśli ktoś ma zamiar użyć coursera-dl do pobrania materiałów klasy otwartej na www.coursera.com, aw systemie Windows ktoś chce użyć pliku takiego jak „.netrc”, który jest podobny do systemu Unix, aby dodać opcja -nzamiast -U <username> -P <password>dla wygody. Może to zrobić w ten sposób:

  1. Sprawdź ścieżkę główną w systemie operacyjnym Windows: setx HOME %USERPROFILE%(patrz odpowiedź VonC ). Zapisuje HOMEzmienną środowiskową jako C:\Users\"username".

  2. Zlokalizuj w katalogu C:\Users\"username"i utwórz nazwę pliku _netrc. UWAGA: NIE ma sufiksu. zawartość jest następująca:machine coursera-dl login <user> password <pass>

  3. Użyj polecenia takiego jak coursera-dl -n --path PATH <course name>pobranie materiałów do zajęć. Więcej szczegółów dotyczących opcji coursera-dl dla tej strony .

BO.LI
źródło