Vraag Is er een manier om het typen van wachtwoorden over te slaan bij het gebruik van https: // op GitHub?


Ik ben onlangs overgeschakeld naar het synchroniseren van mijn repository's naar https: // op GitHub (vanwege problemen met de firewall), en het vraagt ​​telkens om een ​​wachtwoord. Vroeger had ik een SSH certificaat, en het was genoeg. Is er een manier om het wachtwoord in mijn geval te omzeilen (met behulp van http / https)?


1621
2018-03-17 17:47


oorsprong


antwoorden:


Met Git-versie 1.7.9 en later

Sinds Git 1.7.9 (uitgebracht eind januari 2012) is er een goed mechanisme in Git om te voorkomen dat je je wachtwoord de hele tijd moet typen voor HTTP / HTTPS, genaamd referentiehelpers. (Dankzij dazonic voor het wijzen op deze nieuwe functie in de reacties hieronder.)

Met Git 1.7.9 of hoger kunt u gewoon een van de volgende legitimatiehelpers gebruiken:

git config --global credential.helper cache

... wat Git vertelt om je wachtwoord in het cachegeheugen (standaard) 15 minuten in het cachegeheugen te bewaren. U kunt een langere time-out instellen met:

git config --global credential.helper "cache --timeout=3600"

(Dat voorbeeld werd gesuggereerd in de GitHub-helppagina voor Linux.) U kunt uw referenties ook permanent opslaan als u dat wilt, zie de andere antwoorden hieronder.

GitHub's hulp suggereert ook dat als je Mac OS X gebruikt en gebruikt homebrew om Git te installeren, kunt u de native Mac OS X keystore gebruiken met:

git config --global credential.helper osxkeychain

Voor Windows is er een helper genoemd Git Credential Manager voor Windows of wincred in msysgit.

git config --global credential.helper wincred # obsolete

Met Git voor Windows 2.7.3+ (Maart 2016):

git config --global credential.helper manager

Voor Linux kan dat gebruik gnome-keyring(of andere implementatie van keyring, zoals KWallet).

Met Git-versies vóór 1.7.9

Met versies van Git vóór 1.7.9 is deze meer beveiligde optie niet beschikbaar en moet je de URL wijzigen die je hebt origin gebruik op afstand om het wachtwoord op deze manier op te nemen:

https://you:password@github.com/you/example.git

... met andere woorden met :password na de gebruikersnaam en vóór de @.

U kunt een nieuwe URL instellen voor uw origin afstandsbediening met:

git config remote.origin.url https://you:password@github.com/you/example.git

Zorg ervoor dat je gebruikt https en je moet weten dat als je dit doet, je GitHub-wachtwoord in gewone tekst wordt opgeslagen in je .git directory, wat uiteraard ongewenst is.

Met elke Git-versie (wel, sinds versie 0.99)

Een alternatieve benadering is om uw gebruikersnaam en wachtwoord in uw ~/.netrc bestand, hoewel, net als bij het bewaren van het wachtwoord in de externe URL, dit betekent dat uw wachtwoord in platte tekst op de schijf wordt opgeslagen en dus minder veilig is en niet wordt aanbevolen. Als u echter deze benadering wilt volgen, voegt u de volgende regel toe aan uw ~/.netrc:

machine <hostname> login <username> password <password>

... vervangen <hostname> met de hostnaam van de server, en <username> en <password> met uw gebruikersnaam en wachtwoord. Vergeet ook niet om beperkende bestandssysteemrechten voor dat bestand in te stellen:

chmod 600 ~/.netrc

Merk op dat dit bestand in Windows moet worden aangeroepen _netrc, en je moet mogelijk de% HOME% omgevingsvariabele definiëren - voor meer details zie:


2133
2018-03-17 17:54



Je kunt Git ook je referenties permanent laten opslaan met behulp van het volgende:

git config credential.helper store

Opmerking: Hoewel dit handig is, slaat Git uw inloggegevens op in duidelijke tekst een lokaal bestand (.git-referenties) onder uw projectdirectory (zie hieronder voor de "home" -directory). Als u dit niet leuk vindt, verwijdert u dit bestand en schakelt u over naar het gebruik van cache optie.

Als je wilt dat Git doorgaat met het opnieuw vragen naar referenties als dat nodig is verbinding maken met de externe repository, kunt u deze opdracht uitvoeren:

git config --unset credential.helper

Om de wachtwoorden op te slaan .git-credentials in uw %HOME% directory in tegenstelling tot de projectdirectory: gebruik de --global vlag

git config --global credential.helper store

638
2017-09-03 01:14



TLDR; Gebruik een gecodeerd netrc-bestand met Git 1.8.3+.

Een wachtwoord opslaan voor een Git-repository HTTPS-URL is mogelijk met een ~/.netrc (Unix) of %HOME%/_netrc (merk op _) op Windows.

Maar: Dat bestand bewaart uw wachtwoord in platte tekst.

Oplossing: Versleutel dat bestand met GPG (GNU Privacy Guard), en zorg ervoor dat Git het decodeert telkens als het een wachtwoord nodig heeft (voor push/pull/fetch/clone operatie).


Opmerking: met Git 2.18 (Q2 2018) kunt u nu de GPG aanpassen die wordt gebruikt om de versleutelde gegevens te decoderen .netrc het dossier.

Zien commit 786ef50, commit f07eeed (12 mei 2018) door Luis Marsano (``).
(Samengevoegd door Junio ​​C Hamano - gitster - in commit 017b7c5, 30 mei 2018) 

git-credential-netrc: aanvaarden gpg keuze

git-credential-netrc was hardcoded om te decoderen met 'gpg' los van   de optie gpg.program.
  Dit is een probleem met distributies zoals Debian die moderne GnuPG iets anders noemen, zoals 'gpg2'


Stapsgewijze instructies voor Windows

Met Windows:

(Git heeft een gpg.exe in de distributie, maar met behulp van een volledige GPG-installatie bevat een gpg-agent.exe, die uw wachtwoordzin van uw GPG-sleutel onthoudt.)

  • Installeren gpg4Win Lite, de minimale opdrachtregelinterface van gnupg (neem de meest recente gpg4win-vanilla-2.X.Y-betaZZ.exe) en voltooi uw PATH met de GPG-installatiemap:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(Merk op 'copy'opdracht: Git heeft een Bash-script nodig om het commando uit te voeren'gpg'. Sinds gpg4win-vanilla-2 komt met gpg2.exe, je moet het dupliceren.)

  • Maak of importeer een GPG-sleutel en vertrouw deze:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Zorg ervoor dat u een wachtwoordzin op die sleutel zet.)

  • Vertrouw die sleutel

  • Installeer het legitimatieshelp-script in een map binnen uw %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
    

(Ja, dit is een Bash-script, maar het werkt op Windows omdat het door Git wordt aangeroepen.)

  • Maak een _netrc-bestand in duidelijke tekst

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(Vergeet de 'protocol' een deel: 'http'of'https'afhankelijk van de URL die u wilt gebruiken.)

  • Versleutel dat bestand:

    gpg -e -r a_recipient _netrc
    

(Dat kan nu verwijderen de _netrc bestand, alleen de _netrc.gpg gecodeerde.)

  • Gebruik dat gecodeerde bestand:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Merk op '/': C:\path\to... zou helemaal niet werken.) (Je kunt het eerst gebruiken -v -d om te zien wat er aan de hand is.)

Vanaf nu zal elke Git-opdracht die een HTTP (S)--URL gebruikt waarvoor verificatie is vereist, die ontsleutelen _netrc.gpgbestand en gebruik de login / wachtwoord gekoppeld aan de server waarmee u contact opneemt. De eerste keer vraagt ​​GPG je om de wachtwoordzin van je GPG-sleutel om het bestand te decoderen. De andere keren, de gpg-agent automatisch gelanceerd bij de eerste GPG-oproep zal die wachtwoordzin voor u worden opgegeven.

Op die manier kun je onthouden verscheidene URL's / logins / wachtwoorden in één bestand, en laat het op uw schijf versleuteld opslaan.
Ik vind het handiger dan een "cache" helper ", waar je een wachtwoord voor elk van je externe services moet onthouden en typen (een keer per sessie), want dat wachtwoord moet in het cachegeheugen worden opgeslagen.


85
2017-08-21 15:48



Er is een eenvoudige, ouderwetse manier om gebruikersreferenties op te slaan in een HTTPS-URL:

https://user:password@github.com/...

U kunt de URL wijzigen met git remote set-url <remote-repo> <URL>

Het duidelijke nadeel van die aanpak is dat je het wachtwoord in platte tekst moet opslaan. U kunt nog steeds gewoon de gebruikersnaam invoeren (https://user@github.com/...) wat je in ieder geval de helft van het gedoe bespaart.

U kunt er de voorkeur aan geven om naar SSH over te schakelen of om de GitHub-clientsoftware te gebruiken.


32
2018-01-06 16:43



Gebruik een referentieopslag.

Voor git 2.11+ aan OSX en linux, gebruik het ingebouwde inloggegevensarchief van git:

git config --global credential.helper libsecret

Voor msysgit 1.7.9+ aan ramen:

git config --global credential.helper wincred

Gebruik voor Git 1.7.9+ op OS X:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



Je kunt gewoon gebruiken

git config credential.helper store

Wanneer u de volgende keer het wachtwoord invoert met trekken of duwen, wordt het opgeslagen in .git-referenties als platte tekst (een beetje onveilig, maar zet hem gewoon in de beveiligde map)

En dat is het, zoals vermeld op deze pagina:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



Ik ben waarschijnlijk een beetje traag, maar het was me niet meteen duidelijk dat ik eerst de helper moest downloaden! Ik vond de credential.helper-download bij Atlassian's Permanente authenticatie met Git-bibliotheken, hoop dat het helpt.

Citaat:

Volg deze stappen als u Git wilt gebruiken met inlogcaching in OSX:

Download de binaire git-credential-osxkeychain.

Voer de onderstaande opdracht uit om te zorgen dat het binaire bestand uitvoerbaar is:

chmod a+x git-credential-osxkeychain

Zet het in de map / usr / local / bin.

Voer de onderstaande opdracht uit:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31



Op een GNU / Linux-setup werkt een ~ / .netrc ook best goed:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Het kan afhankelijk zijn van de netwerkbibliotheken waar Git voor gebruikt HTTPS vervoer.


18
2017-12-05 13:28