Wie gebe ich einen Benutzernamen und ein Passwort an, wenn ich "git clone [email protected]" ausführe?

846

Ich weiß, wie man einen Benutzernamen und ein Passwort für eine HTTPS-Anfrage wie diese angibt:

git clone https://username:password@remote

Aber ich möchte wissen, wie man der Fernbedienung einen Benutzernamen und ein Passwort wie folgt gibt:

git clone [email protected]

Ich habe es so versucht:

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

Aber sie haben nicht funktioniert.

Koordinate
quelle
4
Das kannst du nicht. Das "git" vor dem "@" ist bereits ein Benutzername. Woher haben Sie die Repository-URL ([email protected])? Woher kam die Idee, dass Sie einen anderen Benutzernamen und ein anderes Passwort angeben müssen?
Ken Thomases
3
Meine Repos-URL stammt von heroku "[email protected]: zxy-helloworld.git". Und ich benutze Emacs Shell, um zu klonen und zu pushen. Wenn die Shell nach einem Passwort fragt, hängen Emacs. Dies ist ein bekanntes Problem mit Emacs unter Windows: gnu.org/software/emacs/windows/…
Koordinate
Was ist, wenn der Benutzername eine E-Mail ist? Wie tippst du es? myemail @ gmail.com @ example.com ?
Kyon Perez

Antworten:

1319

Basierend auf Michael Scharfs Kommentar:

Sie können das Kennwort weglassen, damit es nicht in Ihrer Bash-Verlaufsdatei protokolliert wird:

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

Sie werden aufgefordert, Ihr Passwort einzugeben.

Alternativ können Sie Folgendes verwenden:

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

Dieser Weg funktionierte für mich aus einem GitHub-Repository.

Bassetassen
quelle
5
es muss übrigens nicht dasselbe sein. Wenn Ihr Kollege das Git-Repo erstellt hat und Sie sich als ein anderes Konto anmelden, sind diese nicht identisch.
Holgac
49
Es ist nicht ratsam, das Passwort in die URL einzugeben, damit diese Datei in der .git / config gespeichert wird. Ist nicht sicher, ist es besser,
SSH-
55
@ MrDuk kein Problem, entkommen Sie es (als% 40 iirc).
Benjamin Gruenbaum
57
Sie können das Passwort weglassen : git clone https://[email protected]/username/repository.git. Git wird Sie fragen und es wird weder in .git / config noch in Ihrem Bash-Verlauf
gespeichert
37
Sie können auch 'Leerzeichen' am Anfang der Zeile
eingeben
213

Das user@host:path/to/repoFormat weist Git an, sich mit ssh hostmit dem Benutzernamen anzumelden user. Von git help clone:

Eine alternative scp-ähnliche Syntax kann auch mit dem ssh-Protokoll verwendet werden:

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

Der Teil vor dem @ist der Benutzername, und die Authentifizierungsmethode (Kennwort, öffentlicher Schlüssel usw.) wird von ssh und nicht von Git bestimmt. Git hat keine Möglichkeit, ein Passwort an ssh zu übergeben, da ssh abhängig von der Konfiguration des Remote-Servers möglicherweise nicht einmal ein Passwort verwendet.

Verwenden Sie ssh-agentdiese Option , um zu vermeiden, dass ständig Kennwörter eingegeben werden

Wenn Sie Ihr SSH-Kennwort nicht ständig eingeben möchten, besteht die typische Lösung darin, ein öffentliches / privates Schlüsselpaar zu generieren , den öffentlichen Schlüssel in Ihrer ~/.ssh/authorized_keysDatei auf dem Remote-Server abzulegen und Ihren privaten Schlüssel in zu laden ssh-agent. Siehe auch Konfigurieren von Git über SSH einmal einzuloggen , GitHub Hilfe Seite auf SSH - Schlüssel Paßphrasen , gitolite ssh Dokumentation und Dokumentation Heroku der SSH - Schlüssel .

Auswahl zwischen mehreren Konten bei GitHub (oder Heroku oder ...)

Wenn Sie mehrere Konten an einem Ort wie GitHub oder Heroku haben, haben Sie mehrere SSH-Schlüssel (mindestens einen pro Konto). Um auszuwählen, unter welchem ​​Konto Sie sich anmelden möchten, müssen Sie ssh mitteilen, welcher private Schlüssel verwendet werden soll .

Angenommen, Sie hatten zwei GitHub-Konten: foound bar. Ihr SSH-Schlüssel für fooist ~/.ssh/foo_github_idund Ihr SSH-Schlüssel für barist ~/.ssh/bar_github_id. Sie möchten [email protected]:foo/foo.gitmit Ihrem fooKonto und [email protected]:bar/bar.gitmit Ihrem barKonto zugreifen . Sie würden Folgendes zu Ihrem hinzufügen ~/.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

Sie würden dann die beiden Repositorys wie folgt 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 ganz vermeiden

Einige Dienste bieten HTTP-Zugriff als Alternative zu ssh:

WARNUNG : Wenn Sie Ihr Passwort zur Klon-URL hinzufügen, speichert Git Ihr Klartext-Passwort in .git/config. Verwenden Sie einen Helfer für Anmeldeinformationen, um Ihr Kennwort bei Verwendung von HTTP sicher zu speichern. Zum Beispiel:

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

Dies führt dazu, dass Git alle 15 Minuten (standardmäßig) nach Ihrem Passwort fragt. Siehe git help credentialsfür Details.

Richard Hansen
quelle
Dies ist die beste Erklärung dafür, wie Git mit SSH funktioniert. Mein Verständnis ist, dass wenn Sie [email protected]: path / to / repo.git angeben, es git effektiv mitteilt, dass der Benutzer git selbst ist und dass er Ihre Anmeldeinformationen (öffentlicher Schlüssel) vom ssh-agent für das abrufen sollte Host "githost.com".
Anael
39

In den Kommentaren zu @ Bassetassens Antwort erwähnte @plosco, dass Sie git clone https://<token>@github.com/username/repository.gitzumindest verwenden können , um von GitHub zu klonen. Ich dachte, ich würde die Vorgehensweise erweitern, falls jemand auf diese Antwort stößt, wie ich es beim Versuch getan habe, das Klonen zu automatisieren.

GitHub hat eine sehr praktische Anleitung dazu, aber es wird nicht behandelt, was zu tun ist, wenn Sie alles für Automatisierungszwecke in einer Zeile zusammenfassen möchten. Es wird gewarnt, dass das Hinzufügen des Tokens zur Klon-URL es im Klartext in speichert .git/config . Dies ist offensichtlich ein Sicherheitsrisiko für fast jeden Anwendungsfall, aber da ich vorhabe, das Repo zu löschen und das Token zu widerrufen, wenn ich fertig bin, ist es mir egal.

1. Erstellen Sie ein Token

GitHub hat hier eine ganze Anleitung, wie man ein Token bekommt, aber hier ist die TL; DR.

  1. Gehen Sie zu Einstellungen> Entwicklereinstellungen> Persönliche Zugriffstoken ( hier ist ein direkter Link )
  2. Klicken Sie auf "Neues Token generieren" und geben Sie Ihr Passwort erneut ein. (Hier ist ein weiterer direkter Link )
  3. Legen Sie eine Beschreibung / einen Namen dafür fest, überprüfen Sie die Berechtigung "Repo" und klicken Sie unten auf der Seite auf die Schaltfläche "Token generieren".
  4. Kopieren Sie Ihr neues Token, bevor Sie die Seite verlassen

2. Klonen Sie das Repo

Das gleiche wie der Befehl @plosco gab git clone https://<token>@github.com/<username>/<repository>.git, nur zu ersetzen <token>, <username>und <repository>mit dem, was Ihr Info ist.

Wenn Sie es in einen bestimmten Ordner klonen möchten, geben Sie einfach die Ordneradresse am Ende wie folgt ein : git clone https://<token>@github.com/<username>/<repository.git> <folder>Wo <folder>befindet sich der Ordner, in den Sie ihn klonen möchten? Sie können natürlich auch verwenden ., .., ~, hier usw. wie können Sie an anderer Stelle.

3. Hinterlassen Sie keine Spuren

Je nachdem, wie sensibel Ihre Arbeit ist, ist möglicherweise nicht alles erforderlich.

  • Sie möchten dieses Token wahrscheinlich nicht hängen lassen, wenn Sie nicht beabsichtigen, es für einige Zeit zu verwenden. Gehen Sie also zurück zur Tokenseite und klicken Sie auf die Schaltfläche zum Löschen daneben.
  • Wenn Sie das Repo nicht erneut benötigen, löschen Sie es rm -rf <folder>.
  • Wenn Sie das Repo erneut benötigen, es aber nicht erneut automatisieren müssen, können Sie die Fernbedienung durch Ausführen git remote remove originentfernen oder das Token einfach durch Ausführen entfernen git remote set-url origin https://github.com/<username>/<repository.git>.
  • Löschen Sie Ihren Bash-Verlauf, um sicherzustellen, dass das Token dort nicht protokolliert bleibt. Es gibt viele Möglichkeiten, dies zu tun, siehe diese Frage und diese Frage . Es kann jedoch einfacher sein, allen oben genannten Befehlen ein Leerzeichen voranzustellen, um zu verhindern, dass sie zunächst gespeichert werden.

Beachten Sie, dass ich kein Profi bin, daher ist das oben Gesagte möglicherweise nicht in dem Sinne sicher, dass für jede Art von forensischer Arbeit keine Spur übrig bleibt.

Rob Rose
quelle
1
https://<token>@github.comwurde mit meinem Portal nicht akzeptiert, ich musste verwendenhttps://oauth2:<token>@github.com
MushyPeas
25

Obwohl es viele Antworten gibt, stehe ich vor dem wiederholten Problem, wenn Benutzername oder Passwort Sonderzeichen enthalten.

URL verschlüsseln Sie Ihren Benutzernamen und Ihr Passwort für git und verwenden Sie es dann als Teil der URL selbst (wenn keine Sicherheitsbedenken bestehen).

Angenommen, der URL-codierte Wert des Benutzernamens

'Benutzer + 1' ist Benutzer% 2B1

und URL-codierter Wert des Passworts

'Welcome @ 1234' ist Welcome% 401234

Dann würde Ihre GIT-Klon-URL folgendermaßen aussehen:

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo funktioniert perfekt, während

Git-Klon https: // Benutzer + 1: Willkommen @ 1234 @ Ist-Git-URL-für-das-Repo gibt Ihnen 403 Fehler

Hoffe das hilft.

Nur für den Fall, möchten Sie URL online codieren: https://www.urlencoder.org/

Santosh Kumar Arjunan
quelle
13

Ich habe dieses Problem folgendermaßen gelöst:

Geben Sie hier die Bildbeschreibung ein

BehrouzMoslem
quelle
11
Niemals eine gute Idee, Ihr Passwort in die Kommandozeile einzugeben. Wussten Sie, dass Ihr System möglicherweise den Befehlszeilenverlauf in einer Datei speichert? (Beispiel: Linux hat eine versteckte Datei mit dem Namen .bash_history)
August
Richtig. Wann immer ich dies tue oder so etwas, was manchmal sehr praktisch sein kann, lösche ich immer den Befehl, den ich verwendet habe, aus dem Verlauf (history -d).
Francesco Marchetti-Stasi
4
@ FrancescoMarchetti-Stasi Sie müssen den Befehl nicht löschen, verwenden Sie einfach ein Leerzeichen am Anfang des Befehls und es wird nie im Verlauf gespeichert.
Ishtiyaq Husain
Ja - ich habe es erst vor ein paar Monaten gelernt, nach fast 30 Jahren auf Unix-Systemen ... Schande über mich :)
Francesco Marchetti-Stasi
9

Unter Windows sollten die folgenden Schritte das GitHub-Anmeldefenster beim Auslösen erneut auslösen git clone:

  • Suchen Sie im Startmenü nach "Credential Manager".
  • Wählen Sie "Windows-Anmeldeinformationen".
  • Löschen Sie alle Anmeldeinformationen für Git oder GitHub

Ergebnis

Ore4444
quelle
5
git config --global core.askpass

Führen Sie dies zuerst aus, bevor Sie auf die gleiche Weise klonen. Sollte behoben sein!

Rohan
quelle
3
Versuchte das, fragt immer noch nicht danach.
Maarten Kieft
Das Festlegen einer globalen Konfiguration ist niemals eine gute Idee, da dies andere Klone durcheinander bringen könnte.
Martin
1

Dies ist eine ausgezeichnete Frage zum Stapelüberlauf, und die Antworten waren sehr aufschlussreich, sodass ich ein lästiges Problem lösen konnte, auf das ich kürzlich gestoßen bin.

Die Organisation, für die ich arbeite, verwendet ein Atlassian's BitBucketProdukt (nicht Github), im Wesentlichen ihre Version von GitHub, damit Repositorys vollständig vor Ort gesichert werden können. Ich hatte ein ähnliches Problem wie @coordinate, da mein Passwort für ein neues Repository erforderlich war, das ich ausgecheckt habe. Meine Anmeldeinformationen wurden global für alle BitBucketProjekte gespeichert , daher bin ich mir nicht sicher, was zum Verlust von Anmeldeinformationen geführt hat.

Kurz gesagt, ich konnte den folgenden GIT-Befehl eingeben ( nur meinen Benutzernamen angeben), der Git's Credential Manager aufforderte , mich zur Eingabe des Kennworts aufzufordern, das ich dann speichern konnte.

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

HINWEIS: Die in Klammern gesetzten Verzeichnis-Unterpfade beziehen sich einfach auf interne Referenzen und variieren für Sie!

Michael M.
quelle
0

Wenn Sie den Prozess verwenden http/httpsund ihn VOLLSTÄNDIG AUTOMATISIEREN möchten , ohne dass Benutzereingaben oder Eingabeaufforderungen erforderlich sind (z. B. innerhalb einer CI / CD-Pipeline), können Sie den folgenden Ansatz nutzengit 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}

Hier können Sie die ALICE_GITHUB_PASSWORDUmgebungsvariable aus einem vorherigen Shell-Befehl oder aus Ihrer Pipeline-Konfiguration usw. festlegen.

Denken Sie daran, dass "store" -basierter git-credential-helper Passwörter und Werte im Klartext speichert. Stellen Sie daher sicher, dass Ihr Token / Passwort nur über sehr eingeschränkte Berechtigungen verfügt.


Verwenden Sie jetzt einfach https: //[email protected]/my_repo.git, wo immer Ihr automatisiertes System das Repo abrufen muss - es verwendet die Anmeldeinformationen für alicein github.comals Speicher von git-credential-helper.

Rakib
quelle