Wie vermeide ich die Angabe des Benutzernamens und des Passworts bei jedem Git-Push?

317

Ich git pusharbeite an einem entfernten Git-Repository.

Jeder pushwird mich zur Eingabe auffordern usernameund password. Ich möchte es bei jedem Push vermeiden, aber wie konfiguriere ich es, um es zu vermeiden?

Leem.fin
quelle
6
Eine Antwort finden Sie hier: stackoverflow.com/questions/6565357/…
kbdjockey
3
Lange Rede, kurzer Sinn: Für Github folgen Sie einfach diesen beiden Links help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun
Für Bitbucket folgen Sie bitte diesem Link
JDP

Antworten:

346

1. Generieren Sie einen SSH-Schlüssel

Linux / Mac

Öffnen Sie das Terminal, um SSH-Schlüssel zu erstellen:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Für Windows

(Funktioniert nur, wenn das Festschreibungsprogramm Zertifikate / private und öffentliche SSH-Schlüssel verwenden kann.)

  1. Verwenden Sie Putty Gen, um einen Schlüssel zu generieren
  2. Exportieren Sie den Schlüssel als offenen SSH-Schlüssel

Hier ist eine exemplarische Vorgehensweise für Putty Gen für die oben genannten Schritte

2. Ordnen Sie den SSH-Schlüssel dem Remote-Repository zu

Dieser Schritt hängt davon ab, wie Ihre Fernbedienung eingerichtet ist.

  • Wenn es sich um ein GitHub-Repository handelt und Sie über Administratorrechte verfügen, gehen Sie zu den Einstellungen und klicken Sie auf "SSH-Schlüssel hinzufügen". Kopieren Sie den Inhalt von ~/.ssh/id_rsa.pubin das Feld "Schlüssel".

  • Wenn Ihr Repository von einer anderen Person verwaltet wird, geben Sie dem Administrator Ihre id_rsa.pub.

  • Wenn Ihr Remote-Repository von Ihrem verwaltet wird, können Sie diesen Befehl beispielsweise verwenden:

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Stellen Sie Ihre Remote-URL auf ein Formular ein, das SSH 1 unterstützt

Wenn Sie die obigen Schritte ausgeführt haben und weiterhin die Kennwortabfrage erhalten, stellen Sie sicher, dass Ihre Repo-URL im Formular enthalten ist

git+ssh://[email protected]/username/reponame.git

im Gegensatz zu

https://github.com/username/reponame.git

Führen Sie Folgendes aus, um Ihre Repo-URL anzuzeigen:

git remote show origin

Sie können die URL ändern mit:

git remote set-url origin git+ssh://[email protected]/username/reponame.git

[1] Dieser Abschnitt enthält die Antwort von Eric P.

Erste Null
quelle
3
Ich habe Schritt 1 und Schritt 2 auf Ubuntu ausgeführt, aber es fragt mich immer noch nach u_id passwd. Ich lief auch: ssh -T [email protected]. Immer noch die gleichen. Was ist zu tun?
Radhika
4
@Rads Hast du die andere Antwort von Eric P ausprobiert ?
Yo '
2
@dialex Er meinte eine Person, die das Remote-Git-Repository verwaltet.
Selalerer
5
git remote set-url origin git + ssh: //[email protected]/username/reponame.git Dieser Befehl ist hilfreich für mich.
Künstliche
2
Das hat bei mir funktioniertgit remote set-url origin [email protected]:/username/projectname.git
Kurt
181

Permanente Authentifizierung mit Git-Repositorys,

Führen Sie den folgenden Befehl aus, um das Caching von Anmeldeinformationen zu aktivieren.

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

Die Verwendung sollte auch angeben, dass das Caching abläuft .

git config --global credential.helper 'cache --timeout 7200'

Nach dem Aktivieren des Caching von Anmeldeinformationen wird dieser für 7200 Sekunden (2 Stunden) zwischengespeichert .

Hinweis: Hilfsprogramm für Anmeldeinformationen zum Speichern eines unverschlüsselten Kennworts auf der lokalen Festplatte.

Jay Patel
quelle
4
Vielen Dank. Können Sie bitte erklären, was der Befehl config bewirkt? Ich frage mich, warum ich beim ersten Push auf ein Repo nicht einmal nach einem Passwort gefragt werde.
HelloWorldNoMore
1
@vivoconunxino Wahrscheinlich, weil es von Natur aus unsicher ist. Aus der gitManpage: "Wenn Sie diesen Helfer verwenden, werden Ihre Passwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt."
cmaster
15
In dieser Antwort fehlt eine Warnung, dass der storeHelfer für Anmeldeinformationen das Kennwort unverschlüsselt auf der Festplatte speichert.
cmaster
1
@DavidRTribble: auf Cache setzen? Oder entfernen Sie die entsprechende Datei, siehe git-scm.com/docs/git-credential-store
serv-inc
1
@ DavidRTribble: besser:git config --unset credential.helper
serv-inc
116

Wenn Sie Ihre SSH-Schlüssel bereits eingerichtet haben und weiterhin die Kennwortabfrage erhalten, stellen Sie sicher, dass Ihre Repo-URL im Formular enthalten ist

git+ssh://[email protected]/username/reponame.git

im Gegensatz zu

https://github.com/username/reponame.git

Führen Sie Folgendes aus, um Ihre Repo-URL anzuzeigen:

git remote show origin

Sie können die URL folgendermaßen ändern git remote set-url:

git remote set-url origin git+ssh://[email protected]/username/reponame.git
Eric P.
quelle
Dies hat mein Problem behoben, nachdem ich git initlokal verwendet und dann versucht hatte, nach dem Hinzufügen der Fernbedienung von einem neuen Repo auf der GitHub-Website zu pushen.
Sheldonkreger
1
Ich bin mir nicht sicher, warum dies nicht Teil der akzeptierten Antwort ist. Vielen Dank!
Jwalk
1
Die akzeptierte Antwort sollte sich aus der tatsächlich akzeptierten Antwort und dieser zusammensetzen.
Puce
3
Sie können das "git + ssh: //" weglassen und einfach[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev Ich habe es zunächst ohne Git + SSH versucht und nicht funktioniert
Antonello
40

Verwenden Sie einfach die --repoOption für den Befehl git push. So was:

$ git push --repo https://name:[email protected]/name/repo.git
Pavel
quelle
37
Oder Sie können dies standardmäßig mitgit remote set-url origin https://name:[email protected]/repo.git
ACyclic
Ich stelle fest, dass das Setzen der URL auf "a" auch [email protected]/....gitfunktioniert, wenn es Ihnen nichts ausmacht, jedes Mal nach dem Passwort zu suchen.
Tag
Für Github-Benutzer git push --repo https://github.com/Username/repo funktioniert es ohne die .git Erweiterung
Pe Dro
24

Auf unbestimmte Zeit speichern

Sie können den git-credential-store über verwenden

git config credential.helper store

die speichert Ihr Passwort unverschlüsselt im Dateisystem :

Wenn Sie diesen Hilfsprogramm verwenden, werden Ihre Kennwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt. Wenn dies kein akzeptabler Kompromiss bei der Sicherheit ist, versuchen Sie es mit git-credential-cache oder suchen Sie einen Helfer, der in den von Ihrem Betriebssystem bereitgestellten sicheren Speicher integriert ist.

Mit einer Auszeit

Verwenden Sie den Git-Credential-Cache, in dem das Kennwort standardmäßig 15 Minuten lang gespeichert ist.

git config credential.helper cache

Verwenden Sie --timeout(hier 5 Minuten) , um ein anderes Zeitlimit festzulegen.

git config credential.helper 'cache --timeout=300'

Sicheres Speichern auf unbestimmte Zeit (OS X und Windows)

  • Wenn Sie einen Mac verwenden, verfügt Git über einen "osxkeychain" -Modus , in dem Anmeldeinformationen im sicheren Schlüsselbund zwischengespeichert werden, der an Ihr Systemkonto angehängt ist. Diese Methode speichert die Anmeldeinformationen auf der Festplatte und läuft nie ab. Sie werden jedoch mit demselben System verschlüsselt, auf dem HTTPS-Zertifikate und automatische Safari-Ausfüllungen gespeichert sind. Wenn Sie Folgendes in der Befehlszeile ausführen, wird diese Funktion aktiviert : git config --global credential.helper osxkeychain. Sie müssen die Anmeldeinformationen auch mit der Schlüsselbund-App im Schlüsselbund speichern.
  • Wenn Sie Windows verwenden, können Sie einen Hilfsprogramm namens "Git Credential Manager für Windows" installieren. Dies ähnelt dem oben beschriebenen "osxkeychain" -Helfer, verwendet jedoch den Windows Credential Store, um vertrauliche Informationen zu steuern. Es kann unter https://github.com/Microsoft/Git-Credential-Manager-for-Windows gefunden werden . [betont meine]
serv-inc
quelle
Für Windows credential.helper cachefunktioniert NICHT. Es sollte sein git config --global credential.helper wincred.
Paulo Merson
1
Dies ist hilfreich, wenn Sie gezwungen sind, https zu verwenden. Mein Git auf dem Server hängt, wenn ich ssh verwende, daher habe ich keine Option für SSH-Schlüssel.
Sridhar Sarnobat
8

Ich habe den https-Link ( https://github.com/org/repo.git) anstelle des SSH-Links verwendet.

[email protected]:org/repo.git  

Das Umschalten hat das Problem für mich gelöst!

ishan
quelle
6

Schritt 1 -

Erstellen Sie SSH-Schlüssel auf Ihrem Linux-System mit dem folgenden Befehl

ssh-keygen -t rsa -b 4096 -C "your_email"

Es wird nach Passphrase und Dateiname gefragt (Standard ist ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub).

Schritt 2 -

Sobald die Dateien erstellt wurden, fügen Sie den öffentlichen Schlüssel id_rsa.pub zum Abschnitt ssh des Github-Kontos hinzu.

Schritt 3 -

Fügen Sie auf Ihrem Computer den privaten Schlüssel id_rsa mit dem folgenden Befehl zum ssh-agent hinzu

ssh-add ~/.ssh/id_rsa 

Schritt 4 -

Fügen Sie nun die Remote-URL [email protected]: user_name / repo_name.git mit dem folgenden Befehl zu Ihrem lokalen Git-Repo hinzu.

git remote remove origin
git remote add origin [email protected]:user_name/repo_name.git

Das ist es.

Anil Agrawal
quelle
5

Verwenden Sie unter Windows stattdessen Folgendes: Dies funktioniert für mich:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

z.B

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master
Ayejuni Ilemobayo Könige
quelle
5

Ich wollte nur mehrmals auf die oben genannte Lösung hinweisen:

git config credential.helper store

Sie können jeden Befehl verwenden, für den danach ein Kennwort erforderlich ist. Du musst nicht pushen. (Sie können zum Beispiel auch ziehen) Danach müssen Sie Ihren Benutzernamen / Ihr Passwort nicht erneut eingeben.

TrollAxeThrower
quelle
3

Ich habe die von Pavel vorgeschlagene Antwort verwendet und sie hat bei mir funktioniert. Mein Unterschied bestand darin, dies zu tun, während ich die Fernbedienung wie folgt hinzufügte:git remote add (alias) https://(name:password)@github.com/(the remote address).git

dsmryder
quelle
3

Das Ausführen des folgenden Befehls hat das Problem für mich gelöst.

git config --global credential.helper wincred

Bitte beachten Sie die folgende Github-Dokumentation:

https://help.github.com/articles/caching-your-github-password-in-git/
Krishna
quelle
2

Meine Lösung unter Windows:

  1. Klicken Sie mit der rechten Maustaste auf das Verzeichnis, um "Git Bash Here" zu drücken und auszuwählen.
  2. ssh-keygen -t rsa (Drücken Sie die Eingabetaste für alle Werte)
  3. Überprüfen Sie das Terminal auf: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. Kopieren Sie den öffentlichen Schlüssel aus der angegebenen Datei.
  5. Gehen Sie zu Ihrem GitHub-Profil => Einstellungen => SSH- und GPG-Schlüssel => Neuer SSH-Schlüssel => Fügen Sie dort Ihren SSH-Schlüssel ein => Speichern
Мони Мон
quelle
2

Wenn Ihr PC sicher ist oder Sie sich nicht um die Passwortsicherheit kümmern, kann dies sehr einfach erreicht werden. Angenommen, das Remote-Repository befindet sich auf GitHub und originist Ihr lokaler Name für das Remote-Repository. Verwenden Sie diesen Befehl

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

Das --pushFlag stellt sicher, dass dadurch die URL des Repositorys nur für den git pushBefehl geändert wird . (Die im ursprünglichen Beitrag gestellte Frage git pushbezieht sich nur auf Befehle. Das Erfordernis eines Benutzernamens + Kennworts nur für Push-Vorgänge ist das normale Setup für öffentliche Repositorys auf GitHub. Beachten Sie, dass für private Repositorys auf GitHub auch ein Benutzername + Kennwort für Pull- und Fetch-Vorgänge erforderlich ist Für ein privates Repository möchten Sie also nicht --push flag...) verwenden

WARNUNG: Dies ist von Natur aus unsicher, weil:

  1. Ihr ISP oder jeder, der Ihre Netzwerkzugriffe protokolliert, kann das Kennwort in der URL leicht im Klartext sehen.

  2. Jeder, der Zugriff auf Ihren PC erhält, kann Ihr Passwort mit anzeigen git remote show origin.

Deshalb ist die Verwendung eines SSH-Schlüssels die akzeptierte Antwort.

Selbst ein SSH-Schlüssel ist nicht ganz sicher . Jeder, der Zugriff auf Ihren PC erhält, kann beispielsweise weiterhin Pushs ausführen, die Ihr Repository zerstören, oder - schlimmer noch - Push-Commits durchführen, die geringfügige Änderungen an Ihrem Code vornehmen. (Alle Push-Commits sind auf GitHub offensichtlich gut sichtbar. Wenn jedoch jemand Ihren Code heimlich ändern wollte, konnte er --amendein vorheriges Commit durchführen, ohne die Commit-Nachricht zu ändern, und dann ein Push-Force erzwingen. Das wäre verstohlen und in der Praxis ziemlich schwer zu bemerken. )

Die Offenlegung Ihres Passworts ist jedoch schlimmer . Wenn ein Angreifer Kenntnis von Ihrem Benutzernamen und Passwort erhält, kann er Sie beispielsweise von Ihrem eigenen Konto sperren, Ihr Konto löschen, das Repository dauerhaft löschen usw.


Alternativ können Sie der Einfachheit und Sicherheit halber nur Ihren Benutzernamen in die URL eingeben, sodass Sie jedes Mal Ihr Passwort eingeben müssen, git pushaber nicht jedes Mal Ihren Benutzernamen angeben müssen. (Ich mag diesen Ansatz sehr. Wenn ich das Passwort eingeben muss, kann ich jedes Mal nachdenken git push, damit ich nicht git pushversehentlich nachdenken kann .)

git remote set-url --push origin https://<username>@github.com/<repo>
radfast
quelle
Was ist, wenn Passwort hat @, bricht es Befehl denken Passwort nach @ als Teil des Git-Servers?
Pranav Singh
Wenn Ihr Passwort '@' enthält, sind Sie hier alleine. Sie können Ihr Passwort ändern?
radfast
Ich muss eine Anfrage zum Ändern des Passworts stellen, da ich die Automatisierung für die kontinuierliche Integration mit einem Dienstkonto (nicht persönlich) durchgeführt habe. Im Moment verwendet SSH Keys für die sichere Anmeldung
Pranav Singh
2

Soweit ich weiß, gibt es einfach zwei sichere Möglichkeiten: ssh oder passwd, die mit einem Keystore verschlüsselt wurden .

SSH

  1. Loggen Sie sich in Ihren Github ein.
  2. Besuchen Sie: https://github.com/settings/keys ;
  3. Neuer SSH-Schlüssel;
  4. cat ~/.ssh/id_rsa.pub, fügen Sie es dort ein, benennen und speichern Sie es (wenn Sie keine solche Datei haben, generieren Sie eine für sich selbst ssh-keygen -t rsa- einfach für alle Eingabeaufforderungen die Eingabetaste eingeben).
  5. Gehen Sie zu Ihrem lokalen Repository und aktualisieren Sie Ihre Fernbedienung bis git remote set-url origin git+ssh://[email protected]/username/reponame.git- Sie können dies zuerst durch überprüfengit remote -v );
  6. Los geht's, touch t; git add t; git commit -m "test"; git pushund bestätigen Sie mit Ja, um die Welt ohne Passwort zu genießen .

passwd ENCRYPTED mit einem Keystore

Wenn Sie nur git config --global credential.helper storewie bereits erwähnt verwenden, werden Ihre unverschlüsselten Passwörter nur im Klartext unter gespeichert~/.git-credentials dem es nicht sicher ist, wie es sich anhört.

Versuchen Sie es als zu verschlüsseln

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

In diesem Fall verwenden Sie https://[email protected]/username/reponame.git.

Gehört
quelle
1

All dies entsteht, weil git in den Befehlen clone / pull / push / fetch keine Option zum Senden der Anmeldeinformationen über eine Pipe bietet. Obwohl es credential.helper gibt, speichert es im Dateisystem oder erstellt einen Daemon usw. Häufig handelt es sich bei den Anmeldeinformationen von GIT um Systeme auf Systemebene, und die Sicherheit liegt bei der Anwendung, die die git-Befehle aufruft. Sehr unsicher.

Hier ist, was ich umgehen musste. 1. Die Git-Version (git --version) sollte größer oder gleich 1.8.3 sein.

GIT CLONE

Verwenden Sie zum Klonen "git clone URL", nachdem Sie die URL vom Format http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} in http: // {myuser}: {mypwd} @ {my_repo_ip_address} geändert haben /{myrepo_name.git}

Löschen Sie dann das Repository des Kennworts wie im nächsten Abschnitt beschrieben.

SPÜLEN

Nun, das wäre gegangen und

  1. schrieb das Passwort in Git Remote Origin. Geben Sie "git remote -v" ein, um den Schaden anzuzeigen. Korrigieren Sie dies, indem Sie die URL des Remote-Ursprungs ohne Kennwort festlegen. "git remote set_url origin http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. schrieb das Passwort in .git / logs im Repository. Ersetzen Sie alle Instanzen von pwd mit einem Unix-Befehl wie find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; Hier ist {my_url_with_pwd} die URL mit dem Passwort. Da die URL Schrägstriche enthält, muss sie durch zwei Schrägstriche maskiert werden. Zum Beispiel für die URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git

Wenn Ihre Anwendung Java zum Ausgeben dieser Befehle verwendet, verwenden Sie ProcessBuilder anstelle von Runtime. Wenn Sie Runtime verwenden müssen, verwenden Sie getRunTime (). Exec, das das String-Array als Argumente mit / bin / bash und -c als Argumente verwendet, anstatt das, das einen einzelnen String als Argument verwendet.

GIT FETCH / PULL / PUSH

  1. Setzen Sie das Passwort in der git remote url wie folgt: "git remote set_url origin http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Geben Sie den Befehl git fetch / push / pull ein. Sie werden dann nicht zur Eingabe des Passworts aufgefordert.
  3. Führen Sie die Spülung wie im vorherigen Abschnitt durch. Nicht verpassen.
Krishna
quelle
0

Sie müssen einen privaten SSH-Schlüssel einrichten. Sie können auf dieser Seite nachlesen , wie das Setup unter Mac durchgeführt wird. Wenn Sie unter Linux arbeiten, sollte die Anleitung fast dieselbe sein. Unter Windows benötigen Sie ein Tool wie MSYS .

RageZ
quelle
0

Es scheint, dass es zumindest bei Verwendung von TortoiseGIT unter Windows möglich ist, die SSH-Schlüssel zu erstellen und diese einfach auf den GIT-Server zu übertragen:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
EquipDev
quelle