Niedawno przełączyłem się na synchronizację moich repozytoriów z https: // w GitHub (z powodu problemów z zaporą) i za każdym razem prosi o hasło.
Czy istnieje sposób buforowania poświadczeń zamiast uwierzytelniania za każdym razem git push
?
git
authentication
github
git-push
git-config
Zepplock
źródło
źródło
_netrc
pliku zawierającego twoje poświadczenia. Zobacz moją odpowiedź poniżej . Uważam, że bezpieczniej jestgit-credential-winstore.exe
(pamięć podręczna), która jest nieco wadliwa w systemie Windows.git-credential-winstore
działało najlepiej dla systemu Windows. Co jest buggy Konfigurowanie ssh jest preferowaną opcją, chociaż zrobiłem to już kilka razy, jest jednak bardziej podatne na błędy i czasami po prostu nie działa, gdy musisz połączyć się z wieloma hostami.Odpowiedzi:
W wersji Git 1.7.9 i nowszych
Od wersji Git 1.7.9 (wydanej pod koniec stycznia 2012 r.) W Git znajduje się fajny mechanizm pozwalający uniknąć konieczności ciągłego wpisywania hasła do HTTP / HTTPS, zwanych pomocnikami poświadczeń . (Dzięki dazonic za wskazanie tej nowej funkcji w komentarzach poniżej).
W Git 1.7.9 lub nowszym możesz po prostu użyć jednego z następujących pomocników poświadczeń:
... co każe Gitowi przechowywać twoje hasło w pamięci podręcznej przez (domyślnie) 15 minut. Możesz ustawić dłuższy limit czasu za pomocą:
(Ten przykład został zasugerowany na stronie pomocy GitHub dla systemu Linux ). Możesz również przechowywać swoje poświadczenia na stałe, jeśli chcesz, zobacz inne odpowiedzi poniżej.
Pomoc GitHub sugeruje również, że jeśli korzystasz z Mac OS X i użyłeś Homebrew do zainstalowania Git, możesz użyć natywnego magazynu kluczy Mac OS X z:
W systemie Windows istnieje pomocnik o nazwie Git Credential Manager dla Windows lub Wincred w msysgit .
Z Git dla Windows 2.7.3+ (marzec 2016):
W systemie Linux możesz użyć
gnome-keyring
(lub innej implementacji kluczy, takiej jak KWallet).W wersjach Git wcześniejszych niż 1.7.9
W wersjach Git wcześniejszych niż 1.7.9 ta bardziej bezpieczna opcja nie jest dostępna i musisz zmienić adres URL
origin
używany przez pilota, aby dołączyć hasło w ten sposób:... innymi słowy z
:password
po nazwie użytkownika i przed@
.Możesz ustawić nowy adres URL
origin
pilota:Upewnij się, że używasz
https
, i powinieneś mieć świadomość, że jeśli to zrobisz, twoje hasło GitHub zostanie zapisane w postaci zwykłego tekstu w twoim.git
katalogu, co jest oczywiście niepożądane.Z każdą wersją Gita (cóż, od wersji 0.99)
Alternatywnym podejściem jest umieszczenie nazwy użytkownika i hasła w
~/.netrc
pliku, chociaż, podobnie jak w przypadku przechowywania hasła w zdalnym adresie URL, oznacza to, że twoje hasło będzie przechowywane na dysku jako zwykły tekst, a zatem jest mniej bezpieczne i nie jest zalecane. Jeśli jednak chcesz zastosować to podejście, dodaj następujący wiersz do~/.netrc
:... wymianie
<hostname>
z hosta serwera, a<username>
i<password>
podając swoją nazwę użytkownika i hasło. Pamiętaj również, aby ustawić restrykcyjne uprawnienia systemu plików dla tego pliku:Należy pamiętać, że w systemie Windows ten plik powinien zostać wywołany
_netrc
i może być konieczne zdefiniowanie zmiennej środowiskowej% HOME% - więcej informacji:źródło
git config --global credential.helper osxkeychain
w systemie OS X. W przypadku innych systemów operacyjnych patrz help.github.com/articles/set-up-githttps://username:[email protected]/username/project.git
. Dzięki temu hasła zwykłego tekstu przechowywane na dysku są prawie wystarczająco bezpieczne do użycia.git config --global credential.helper cache
nie działa w systemie Windows: stackoverflow.com/questions/11693074/... użyj gitcredentialstore w systemie Windows i ciesz sięMożesz również poprosić Git o przechowywanie twoich danych uwierzytelniających na stałe, korzystając z następujących opcji:
Uwaga: Chociaż jest to wygodne, Git będzie przechowywać twoje dane uwierzytelniające w postaci zwykłego tekstu w pliku lokalnym (.git-referencje) w katalogu projektu (patrz poniżej katalog „domowy”). Jeśli ci się nie podoba, usuń ten plik i przejdź do korzystania z opcji pamięci podręcznej.
Jeśli chcesz, aby Git wznawiał prośbę o podanie poświadczeń za każdym razem, gdy musi połączyć się ze zdalnym repozytorium, możesz uruchomić tę komendę:
Aby przechowywać hasła w
.git-credentials
swoim%HOME%
katalogu w przeciwieństwie do katalogu projektu: użyj--global
flagiźródło
git config --global credential.helper store
--global
flaga była zbędna. Nawet bez tej flagi plik poświadczeń został utworzony w%USER_HOME%
katalogu.TLDR; Użyj zaszyfrowanego pliku netrc z Git 1.8.3+ .
Zapisywanie hasła do adresu URL repozytorium Git HTTPS jest możliwe w systemie Windows
~/.netrc
(Unix) lub%HOME%/_netrc
(zwróć uwagę na_
).Ale : ten plik przechowuje twoje hasło w postaci zwykłego tekstu.
Rozwiązanie : Zaszyfruj ten plik za pomocą GPG (GNU Privacy Guard) i każ Git odszyfrować go za każdym razem, gdy potrzebuje hasła (do operacji
push
/pull
/fetch
/clone
).Uwaga: w Git 2.18 (Q2 2018) możesz teraz dostosować GPG używane do odszyfrowywania zaszyfrowanego
.netrc
pliku.Zobacz commit 786ef50 , commit f07eeed (12 maja 2018) autor: Luis Marsano (``) .
(Połączone przez Junio C Hamano -
gitster
- w commit 017b7c5 , 30 maja 2018)Instrukcje krok po kroku dla systemu Windows
W systemie Windows:
(Git ma
gpg.exe
w swojej dystrybucji, ale korzystanie z pełnej instalacji GPG obejmuje równieżgpg-agent.exe
, który zapamięta twoje hasło powiązane z twoim kluczem GPG.)Zainstaluj
gpg4Win Lite
minimalny interfejs wiersza polecenia gnupg (weź najnowszygpg4win-vanilla-2.X.Y-betaZZ.exe
) i uzupełnij ŚCIEŻKĘ katalogiem instalacyjnym GPG:(Zwróć uwagę na
copy
polecenie „: Git będzie potrzebował skryptu Bash, aby wykonać poleceniegpg
”. Ponieważgpg4win-vanilla-2
jest dostarczanygpg2.exe
, musisz go zduplikować.)Utwórz lub zaimportuj klucz GPG i zaufaj mu:
(Pamiętaj, aby umieścić hasło do tego klucza.)
Ufaj temu kluczowi
Zainstaluj skrypt pomocnika poświadczeń w katalogu w
%PATH%
:(Uwaga: nazwa skryptu została zmieniona w Git 2.25.x / 2.26, patrz poniżej)
(Tak, jest to skrypt Bash, ale będzie działał w systemie Windows, ponieważ zostanie wywołany przez Git.)
Utwórz plik _netrc w postaci zwykłego tekstu
(Nie zapomnij „
protocol
”: „http
” lub „https
” w zależności od używanego adresu URL).Zaszyfruj ten plik:
(Teraz można usunąć ten
_netrc
plik, zachowując jedynie_netrc.gpg
zaszyfrowany jeden).Użyj tego zaszyfrowanego pliku:
(Uwaga
/
: „wC:\path\to...
ogóle nie działa.) (Możesz użyć na początku,-v -d
aby zobaczyć, co się dzieje).Odtąd każde polecenie Git korzystające z adresu URL HTTP (S), które wymaga uwierzytelnienia, odszyfruje ten
_netrc.gpg
plik i użyje loginu / hasła powiązanego z serwerem, z którym się kontaktujesz. Za pierwszym razem GPG poprosi o podanie hasła twojego klucza GPG, aby odszyfrować plik. Innym razem, gpg-agent uruchamiany automatycznie przez pierwsze połączenie GPG dostarczy Ci to hasło.W ten sposób możesz zapamiętać kilka adresów URL / loginów / haseł w jednym pliku i przechowywać je na dysku zaszyfrowanym.
Uważam, że jest to wygodniejsze niż pomocnik „pamięci podręcznej”, w którym musisz zapamiętać i wpisać (raz na sesję) inne hasło dla każdej ze zdalnych usług, aby wspomniane hasło mogło być buforowane w pamięci.
W Git 2.26 (Q1 2020) przykładowy pomocnik poświadczeń użycia
.netrc
został zaktualizowany, aby działał od razu po wyjęciu z pudełka. Zobacz łatkę / dyskusję .Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu (
Denton-L
) .(Połączone przez Junio C Hamano -
gitster
- w commit 1fd27f8 , 25 grudnia 2019)I:
Wraz z wersją 2.26 (Q1 2020), przykładowy pomocnik poświadczeń do używania .netrc został zaktualizowany do pracy po wyjęciu z pudełka.
Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu (
Denton-L
) .(Połączone przez Junio C Hamano -
gitster
- w commit 1fd27f8 , 25 grudnia 2019)Jeff King (
peff
) dodaje:źródło
curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc
służy: musisz skopiowaćgit-credential-netrc
dowolne miejsce na swojej ścieżce ($PATH
), aby git mógł wywołać „credential-netrc
”._netrc
nie działało to dla mnie naWindows 7
PC, ale.netrc
działało dla youtube-dl z--netrc
przekazanym argumentem.https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(przesyłanie w ciągu siedmiu lat później 😉)Istnieje prosty, staromodny sposób przechowywania poświadczeń użytkownika w adresie URL HTTPS:
Możesz zmienić adres URL za pomocą
git remote set-url <remote-repo> <URL>
Oczywistym minusem tego podejścia jest to, że musisz przechowywać hasło w postaci zwykłego tekstu. Nadal możesz po prostu wpisać nazwę użytkownika (
https://[email protected]/...
), co pozwoli ci zaoszczędzić co najmniej połowę kłopotów.Możesz przełączyć się na SSH lub użyć oprogramowania klienta GitHub.
źródło
Użyj magazynu danych logowania.
Dla Git 2.11+ na OS X i Linux , wykorzystanie wbudowanego w Git magazynu danych logowania :
W przypadku msysgit 1.7.9+ w systemie Windows :
W przypadku Git 1.7.9+ na OS X użyj:
źródło
git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( więcej szczegółów tutaj ). Z tym zawsze powinieneś używać osobistego tokena dostępu i oczywiście 2FA na swoim koncie GitHub.Możesz po prostu użyć
Kiedy następnym razem wprowadzisz hasło za pomocą pull lub push, zostanie ono zapisane w pliku .git-credentials jako zwykły tekst (trochę niezabezpieczony, ale po prostu umieść go w chronionym folderze).
I to wszystko, jak stwierdzono na tej stronie:
git-credential-store
źródło
git config credential.helper manager
zamiast tegoNie od razu zrozumiałem, że najpierw muszę pobrać pomocnika! Znalazłem pobieranie credential.helper w Atlassian's Permanently uwierzytelnianie za pomocą repozytoriów Git .
Zacytować:
Wykonaj następujące kroki, jeśli chcesz używać Git z buforowaniem referencji w OS X:
Pobierz binarny git-credential-osxkeychain.
Uruchom poniższe polecenie, aby upewnić się, że plik binarny jest wykonywalny:
Umieść go w katalogu
/usr/local/bin
.Uruchom poniższe polecenie:
źródło
Wystarczy podać poświadczenia logowania jako część adresu URL:
Uwaga: nie polecam tej metody, ale jeśli spieszysz się i nic więcej nie działa, możesz użyć tej metody.
źródło
W konfiguracji GNU / Linux ~ / .netrc też działa całkiem dobrze:
Może to zależeć od bibliotek sieciowych używanych przez Git do transportu HTTPS .
źródło
chmod 0600 ~/.netrc
.W systemie Windows możesz użyć wtyczki Git Credential Manager (GCM). Obecnie jest utrzymywany przez Microsoft. Zaletą jest to, że zapisuje hasło w Windows Credential Store, a nie jako zwykły tekst.
Na stronie z wydaniami projektu znajduje się instalator . Spowoduje to również zainstalowanie oficjalnej wersji Git dla Windows z wbudowanym menedżerem poświadczeń. Umożliwia uwierzytelnianie dwuskładnikowe dla GitHub (i innych serwerów). I ma interfejs graficzny do początkowego logowania.
Użytkownicy Cygwin (lub użytkownicy korzystający już z oficjalnego Git dla Windows) mogą preferować instalację ręczną. Pobierz pakiet zip ze strony wydań . Wyodrębnij pakiet, a następnie uruchom
install.cmd
plik. To zainstaluje się w twoim~/bin
folderze. (Upewnij się, że~/bin
katalog znajduje się w ŚCIEŻCE). Następnie skonfiguruj go za pomocą tego polecenia:Następnie Git uruchomi się
git-credential-manager.exe
podczas uwierzytelniania na dowolnym serwerze.źródło
printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get
( więcej szczegółów tutaj ). Z tym zawsze powinieneś używać osobistego tokena dostępu i oczywiście 2FA na swoim koncie GitHub.Jeśli nie chcesz przechowywać hasła w postaci zwykłego tekstu, jak powiedział Mark, możesz użyć innego adresu URL GitHub do pobierania niż do wypychania. W pliku konfiguracyjnym w obszarze
[remote "origin"]
:Nadal będzie pytać o hasło po naciśnięciu, ale nie podczas pobierania, przynajmniej w przypadku projektów open source.
źródło
OAuth
Możesz utworzyć swój osobisty token API ( OAuth ) i używać go w taki sam sposób, jak zwykłych danych uwierzytelniających (w:)
/settings/tokens
. Na przykład:.netrc
Inną metodą jest skonfigurowanie użytkownika / hasła w
~/.netrc
(_netrc
w systemie Windows), npW przypadku HTTPS dodaj dodatkowy wiersz:
Pomocnik poświadczeń
Aby buforować hasło GitHub w Git podczas korzystania z HTTPS, możesz użyć pomocnika poświadczeń, aby powiedzieć Gitowi, aby zapamiętał twoją nazwę użytkownika i hasło GitHub za każdym razem, gdy rozmawia z GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
jest wymagany),git config --global credential.helper wincred
git config --global credential.helper cache
Związane z:
źródło
Możesz użyć pomocników poświadczeń.
gdzie
x
jest liczba sekund.źródło
store
,cache
i innych wspólnych rzeczy są wymienione i wyjaśnione?Po sklonowaniu repozytorium
repo
możesz edytowaćrepo/.git/config
i dodać konfigurację, jak poniżej:Wtedy nie będzie pytany o
username
ipassword
ponownie.źródło
helper = manager
(ale jestem proszony o nazwę użytkownika + repo dla pierwszego wypychania).Wiem, że to nie jest bezpieczne rozwiązanie, ale czasami potrzebujesz tylko prostego rozwiązania - bez instalowania czegokolwiek innego. A ponieważ helper = sklep nie działał dla mnie, stworzyłem pomocnika:
Utwórz skrypt i umieść go w folderze bin użytkowników, tutaj o nazwie credfake , ten skrypt dostarczy twoją nazwę użytkownika i hasło:
spraw, by był wykonywalny:
następnie skonfiguruj to w git:
(lub użyj go bez opcji --global tylko dla jednego repozytorium)
oraz - voilá - git użyje tego użytkownika + hasło.
źródło
Zamiast hasła do konta należy użyć tokena uwierzytelniającego. Przejdź do ustawień / aplikacji GitHub, a następnie utwórz osobisty token dostępu. Token może być używany w taki sam sposób jak hasło.
Token ma umożliwić użytkownikom nieużywanie hasła do konta do prac projektowych. Używaj hasła tylko podczas prac administracyjnych, takich jak tworzenie nowych tokenów lub odwoływanie starych tokenów.
Zamiast tokena lub hasła, które zapewniają użytkownikowi pełny dostęp do konta GitHub, można użyć klucza wdrażania specyficznego dla projektu, aby przyznać dostęp do pojedynczego repozytorium projektu. Projekt Git można skonfigurować tak, aby używał tego innego klucza w następujących krokach, gdy nadal można uzyskać dostęp do innych kont lub projektów Git przy użyciu zwykłych poświadczeń:
Host
,IdentityFile
dla klucza wdrażania, być możeUserKnownHostsFile
, a możeUser
(choć myślę, że go nie potrzebujesz).ssh -F /path/to/your/config $*
GIT_SSH=/path/to/your/wrapper
przed normalnym poleceniem Git. Tutajgit remote
(pochodzenie) musi używać[email protected]:user/project.git
formatu.źródło
Lepiej jest użyć poświadczeń dla bezpieczeństwa, ale możesz zachować je przez pewien czas używając pamięci podręcznej:
Twoje dane logowania zostaną zapisane na 3600 sekund.
źródło
--timeout
a poświadczenia zostaną zapisane na zawsze.windowsservercore
)?Sprawy wyglądają trochę inaczej, jeśli używasz uwierzytelniania dwuskładnikowego tak jak ja. Ponieważ nie znalazłem dobrej odpowiedzi gdzie indziej, przykleję ją tutaj, aby być może później.
Jeśli używasz uwierzytelniania dwuskładnikowego, wówczas podanie nazwy użytkownika / hasła nawet nie zadziała - otrzymasz odmowę dostępu. Możesz jednak użyć tokena dostępu do aplikacji i skorzystać z pomocnika Gita, aby buforować go za Ciebie. Oto odpowiednie linki:
I nie pamiętam, gdzie to widziałem, ale kiedy jesteś proszony o swoją nazwę użytkownika - tam przyklejasz token dostępu do aplikacji. Następnie pozostaw puste hasło. Działa na moim komputerze Mac.
źródło
To działa dla mnie używam Windows 10
źródło
Zwykle masz zdalny adres URL, coś takiego,
Jeśli chcesz pominąć nazwę użytkownika i hasło podczas korzystania
git push
, spróbuj tego:Właśnie dodałem ten sam adres URL (z danymi użytkownika, w tym hasłem) do źródła.
UWAGA: Nie działa, jeśli nazwa użytkownika to identyfikator e-mail.
źródło
Otrzymałem odpowiedź od strony podręcznika gitcredentials (7) . W moim przypadku nie mam pamięci podręcznej poświadczeń w instalacji Windows; Używam magazynu referencji.
Po użyciu magazynu referencji nazwa użytkownika / hasło są przechowywane w pliku [folder użytkownika] /. Git-credentials. Aby usunąć nazwę użytkownika / hasło, wystarczy usunąć zawartość pliku.
źródło
git config --global credential.helper wincred
tego sklepu hasła na stałe.Dokumentacja kompozytora wspomina , że można uniemożliwić korzystanie z interfejsu API GitHub, dzięki czemu działa on tak
git clone
:Więc sekcja wyglądałaby tak:
Pamiętaj, że interfejs API istnieje z jakiegoś powodu. Dlatego powinna to być metoda ostateczna w związku ze zwiększonym obciążeniem witryny github.com.
źródło
Również edytować bashrc plik i dodać skrypt w nim.
Spowoduje to prośbę o podanie hasła raz po uruchomieniu Git, a następnie zapamięta je do momentu wylogowania.
źródło
Jeśli używasz
osxkeychain
tokena, który wygasł i chcesz go zaktualizować, wykonaj następujące kroki:Uruchom w terminalu, a następnie naciśnij dwukrotnie klawisz Enter.
Teraz powinieneś zostać poproszony o podanie nazwy użytkownika / hasła. Jednak czasami wydaje się, że to nie „zabiera” i trzeba ciągle wchodzić.
Jeśli tak, uruchom ponownie komputer . Teraz następnym razem, gdy uruchomisz polecenie git i wpiszesz swoją nazwę użytkownika / hasło, zostanie ono zapisane.
źródło