Hoe geef ik een gebruikersnaam en wachtwoord op bij het uitvoeren van “git clone [email protected]”?

Ik weet hoe ik een gebruikersnaam en wachtwoord moet opgeven voor een HTTPS-verzoek zoals dit:

git clone https://username:password@remote

Maar ik zou graag willen weten hoe ik een gebruikersnaam en wachtwoord op de volgende manier aan de afstandsbediening kan geven:

git clone [email protected]

Ik heb het als volgt geprobeerd:

git clone username:password@[email protected]
git clone git@username:[email protected]
git clone [email protected]@username:password

Maar ze hebben niet gewerkt.


Antwoord 1, autoriteit 100%

Gebaseerd op de opmerking van Michael Scharf:

Je kunt het wachtwoord weglaten, zodat het niet wordt vastgelegd in je Bash-geschiedenisbestand:

git clone https://[email protected]/username/repository.git

Het zal u om uw wachtwoord vragen.

U kunt ook het volgende gebruiken:

git clone https://username:[email protected]/username/repository.git

Deze manier werkte voor mij vanuit een GitHub-repository.


Antwoord 2, autoriteit 15%

Het user@host:path/to/repoformaat vertelt Git om ssh te gebruiken om in te loggen op hostmet gebruikersnaam user. Van git help clone:

Een alternatieve scp-achtige syntaxis kan ook worden gebruikt met het ssh-protocol:

[user@]host.xz:path/to/repo.git/

Het gedeelte voor de @is de gebruikersnaam, en de authenticatiemethode (wachtwoord, openbare sleutel, etc.) wordt bepaald door ssh, niet door Git. Git kan geen wachtwoord doorgeven aan ssh, omdat ssh misschien niet eens een wachtwoord gebruikt, afhankelijk van de configuratie van de externe server.

Gebruik ssh-agentom te voorkomen dat u steeds wachtwoorden moet typen

Als je niet altijd je ssh-wachtwoord wilt typen, is de typische oplossing om genereer een openbaar/privé-sleutelpaar, plaats de openbare sleutel in uw ~/.ssh/authorized_keysbestandop de externe server, en laad uw persoonlijke sleutel in ssh-agent. Zie ook Git via SSH configureren om eenmaal in te loggen, GitHub’s helppagina over wachtwoordzinnen voor ssh-sleutels, gitolite’s ssh-documentatieen Heroku’s ssh-sleutelsdocumentatie.

Kiezen tussen meerdere accounts op GitHub (of Heroku of…)

Als je meerdere accounts hebt op een plaats zoals GitHub of Heroku, heb je meerdere ssh-sleutels (minstens één per account). Om te kiezen met welk account je wilt inloggen, moet je ssh vertellen welke privésleutel moet worden gebruikt.

Stel bijvoorbeeld dat u twee GitHub-accounts had: fooEN bar. Uw SSH-sleutel voor foois ~/.ssh/foo_github_iden uw SSH-toets voor baris ~/.ssh/bar_github_id. U wilt toegang tot [email protected]:foo/foo.gitmet uw fooaccount en [email protected]:bar/bar.gitmet uw barACCOUNT. U zou het volgende toevoegen aan uw ~/.ssh/config:

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

U zou dan de twee repositories als volgt klonen:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

SSH vermijden volledig

Sommige services bieden HTTP-toegang als alternatief voor SSH:

WAARSCHUWING : Uw wachtwoord toevoegen aan de clone-URL zal ervoor zorgen dat Git uw Plaintext-wachtwoord opbergt in .git/config. Als u uw wachtwoord veilig wilt opslaan bij het gebruik van HTTP, gebruik dan een referentiehelper. Bijvoorbeeld:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

Het bovenstaande zal ervoor zorgen dat Git één keer om de 15 minuten om uw wachtwoord (standaard). Zie git help credentialsvoor details.


Antwoord 3, Autoriteit 4%

In de opmerkingen van @ bassetassen’s Antwoord , vermeldde @plosco dat u git clone https://<token>@github.com/username/repository.gitom op zijn minst van GitHub te klonen. Ik dacht dat ik zou uitbreiden hoe ik dat moest doen, voor het geval iemand dit antwoord tegenkomt, zoals ik deed terwijl ik probeerde wat klonen te automatiseren.

GitHub heeft een Zeer handig gids over hoe Doe dit, maar het dekt niet wat te doen als je het allemaal in één regel voor automatiseringsdoeleinden wilt opnemen. Het waarschuwt dat het toevoegen van het token aan de clone-URL het inslaan in PlainText in .git/config. Dit is duidelijk een veiligheidsrisico voor bijna elk gebruikscase, maar aangezien ik van plan ben om de repo te verwijderen en het token in te trekken wanneer ik klaar ben, kan het me niet schelen.

1. Maak een token

Github heeft een hele gids Hier over hoe een token te krijgen, maar hier is de TL; DR.

  1. Ga naar Instellingen & GT; Ontwikkelaarinstellingen & GT; Persoonlijke toegang Tokens (Hier is een directe link )
  2. Klik op “Een nieuw token genereren” en voer uw wachtwoord opnieuw in. (h er is een andere directe link )
  3. Stel hiervoor een beschrijving / naam in, controleer de “REPO” -rechten en druk op de knop “Genereer token” onder aan de pagina.
  4. Kopieer uw nieuwe token voordat u de pagina verlaat

2. Kloon de repo

Hetzelfde als het commando dat @plosco gaf, git clone https://<token>@github.com/<username>/<repository>.git, vervang gewoon <token>, <username>en <repository>met wat je info ook is.

Als je het naar een specifieke map wilt klonen, voeg dan het mapadres aan het einde in, zoals: git clone https://<token>@github.com/<username>/<repository.git> <folder>, waar <folder>is, je raadt het al, de map om het naar te klonen! Je kunt hier natuurlijk ., .., ~, etc. gebruiken zoals je dat elders kunt doen.

3. Laat geen spoor achter

Dit is misschien niet allemaal nodig, afhankelijk van hoe gevoelig wat je doet is.

  • Je wilt dat token waarschijnlijk niet laten rondhangen als je een tijdje niet van plan bent om het te gebruiken, dus ga terug naar de tokenspaginaen druk op de verwijderknop ernaast.
  • Als je de repo niet meer nodig hebt, verwijder deze dan rm -rf <folder>.
  • Als je de repo opnieuw nodig hebt, maar niet opnieuw hoeft te automatiseren, kun je de afstandsbediening verwijderen door git remote remove originuit te voeren of gewoon de token verwijderen door git remote set-url origin https://github.com/<username>/<repository.git>.
  • Wis je bash-geschiedenis om ervoor te zorgen dat het token daar niet blijft staan. Er zijn veel manieren om dit te doen, zie deze vraagen deze vraag. Het kan echter gemakkelijker zijn om alle bovenstaande opdrachten met een spatie vooraf te laten gaan om te voorkomen dat ze worden opgeslagen.

Houd er rekening mee dat ik geen professional ben, dus het bovenstaande is mogelijk niet veilig in de zin dat er geen spoor wordt achtergelaten voor forensisch werk.


Antwoord 4, autoriteit 3%

Volg deze argumenten om te vervangen door uw speciale gevallen als ze een probleem veroorzaken:

!   #   $   &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

Dus bijvoorbeeld-

werkelijke URL: https://usern@me:p@ssword@git/reponame.git

Oplossings-URL om te gebruiken: https://usern%40me:p%40ssword@git/reponame.git


Antwoord 5, autoriteit 2%

Hoewel er veel antwoorden zijn, wordt ik geconfronteerd met het herhaalde probleem wanneer een gebruikersnaam of wachtwoord speciale tekens bevat.

URL codeert je gebruikersnaam en wachtwoord voor git en gebruik het dan als onderdeel van de URL zelf (als er geen veiligheidsrisico is).

Zeg, URL-gecodeerde waarde van gebruikersnaam

‘gebruiker+1’ is gebruiker%2B1

en URL-gecodeerde waarde van wachtwoord

‘Welkom@1234’ is Welkom%401234

Dan zou uw GIT-kloon-URL er als volgt uitzien:

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repowerkt perfect, terwijl

git-kloon https://user+1:Welcome@ 1234@actual-git-url-for-the-repogeeft je 403 fouten

Hopelijk helpt dit.

Voor het geval u online een URL wilt coderen: https://www.urlencoder.org/


Antwoord 6

Ik heb dit probleem op de volgende manier opgelost:


Antwoord 7

In Windowsmoeten de volgende stappen het GitHub-inlogvenster opnieuw activeren wanneer git cloneing:

  • Zoek in het startmenu naar “Inloggegevensbeheer”
  • Selecteer “Windows-referenties”
  • Verwijder alle inloggegevens met betrekking tot Git of GitHub


Antwoord 8

Als u http/httpsgebruikt en u wilt het proces VOLLEDIG AUTOMATISERENzonder gebruikersinvoer of gebruikersprompt (bijvoorbeeld: binnen een CI/CD-pijplijn), kunt u de volgende benadering gebruiken door gebruik te maken van git credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used
git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

waar u kunt kiezen om de omgevingsvariabele ALICE_GITHUB_PASSWORDin te stellen van een eerdere shell-opdracht of van uw pijplijnconfiguratie enz.

Onthoud dat op “store” gebaseerde git-credential-helper wachtwoorden opslaat & waarden in platte tekst. Zorg er dus voor dat uw token/wachtwoord zeer beperkte rechten heeft.


Gebruik nu gewoon https://[email protected]/my_repo.gitwaar je geautomatiseerd systeem moet de repo ophalen – het gebruikt de inloggegevens voor alicein github.comals opslag door git-credential-helper.


Antwoord 9

git config --global core.askpass

Voer dit eerst uit voordat u op dezelfde manier gaat klonen, dit zou opgelost moeten zijn!


Antwoord 10

Ik gebruik liever de GIT_ASKPASS-omgeving voor het verstrekken van HTTPS-inloggegevens aan git.
Op voorwaarde dat login en wachtwoord worden geëxporteerd in de variabelen USRen PSW, laat het volgende script geen sporen van wachtwoord achter in de geschiedenis en schijf + is het niet kwetsbaar voor speciale tekens in de wachtwoord:

GIT_ASKPASS=$(mktemp) && chmod a+rx $GIT_ASKPASS && export GIT_ASKPASS
cat > $GIT_ASKPASS <<'EOF'
#!/bin/sh
exec echo "$PSW"
EOF
git clone https://${USR}@example.com/repo.git

NB: Let op enkele aanhalingstekens rond heredoc marker 'EOF'wat betekent dat het tijdelijke script letterlijk $PSWtekens bevat, niet het wachtwoord / uitgebreide waarde van PSWvariabele


Antwoord 11

Dit is een uitstekende Stack Overflow-vraag en de antwoorden waren zeer leerzaam, zodat ik een vervelend probleem kon oplossen dat ik onlangs tegenkwam.

De organisatie waarvoor ik werk gebruikt Atlassian's BitBucket-product (niet Github), in wezen hun versie van GitHub, zodat repositories volledig op locatie kunnen worden beveiligd. Ik kwam een soortgelijk probleem tegen als @coordinate, in die zin dat mijn wachtwoord vereist was voor een nieuwe repository die ik had uitgecheckt. Mijn inloggegevens waren wereldwijd opgeslagen voor alle BitBucket-projecten, dus ik weet niet zeker wat de oorzaak was van het verlies van inloggegevens.

Kortom, ik was in staat om het volgende GIT-commando in te voeren (met alleenmijn gebruikersnaam), wat vervolgens de Credential Manager van Git ertoe bracht me om het wachtwoord te vragen, dat ik vervolgens kon opslaan.

git clone https://[email protected]/git/[organization]/[team]/[repository.git]

OPMERKING: de subpaden tussen haakjes verwijzen eenvoudigweg naar interne referenties en zullen voor u verschillen!

Other episodes