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/repo
formaat vertelt Git om ssh te gebruiken om in te loggen op host
met 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-agent
om 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_keys
bestandop 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: foo
EN bar
. Uw SSH-sleutel voor foo
is ~/.ssh/foo_github_id
en uw SSH-toets voor bar
is ~/.ssh/bar_github_id
. U wilt toegang tot [email protected]:foo/foo.git
met uw foo
account en [email protected]:bar/bar.git
met uw bar
ACCOUNT. 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:
-
GitHub:
https://username:[email protected]/username/repository.git
-
Gitorious:
https://username:[email protected]/project/repository.git
-
HEROKU: Zie dit ondersteuningsartikel .
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 credentials
voor details.
Antwoord 3, Autoriteit 4%
In de opmerkingen van @ bassetassen’s Antwoord , vermeldde @plosco dat u git clone https://<token>@github.com/username/repository.git
om 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.
- Ga naar Instellingen & GT; Ontwikkelaarinstellingen & GT; Persoonlijke toegang Tokens (Hier is een directe link )
- Klik op “Een nieuw token genereren” en voer uw wachtwoord opnieuw in. (h er is een andere directe link )
- Stel hiervoor een beschrijving / naam in, controleer de “REPO” -rechten en druk op de knop “Genereer token” onder aan de pagina.
- 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 origin
uit te voeren of gewoon de token verwijderen doorgit 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-repo
werkt perfect, terwijlgit-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 clone
ing:
- Zoek in het startmenu naar “Inloggegevensbeheer”
- Selecteer “Windows-referenties”
- Verwijder alle inloggegevens met betrekking tot Git of GitHub
Antwoord 8
Als u http/https
gebruikt 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_PASSWORD
in 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 alice
in github.com
als 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 USR
en 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 $PSW
tekens bevat, niet het wachtwoord / uitgebreide waarde van PSW
variabele
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!