it-swarm.com.de

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

Ich git Push meine Arbeit in ein entferntes Git-Repository.

Jede Push fordert mich auf, username und password einzugeben. Ich möchte es für jeden Push vermeiden, aber wie konfigurieren, um es zu vermeiden?

252
Leem.fin

1. Generieren Sie einen SSH-Schlüssel

Linux/Mac

Terminal öffnen, 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 Komplettlösung auf PuTTY-Gen für die obigen Schritte

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

Dieser Schritt hängt von der Einrichtung der Fernbedienung ab.

  • Wenn es sich um ein GitHub-Repository handelt und Sie über Administratorrechte verfügen, gehen Sie zu settings und klicken Sie auf 'SSH-Schlüssel hinzufügen'. Kopieren Sie den Inhalt Ihres ~/.ssh/id_rsa.pub in das Feld 'Key'.

  • Wenn Ihr Repository von jemand anderem verwaltet wird, geben Sie dem Administrator Ihren id_rsa.pub.

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

    scp ~/.ssh/id_rsa.pub [email protected]_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Legen Sie für Ihre Remote-URL ein Formular fest, das SSH unterstützt 1

Wenn Sie die obigen Schritte ausgeführt haben und immer noch die Kennworteingabeaufforderung erhalten, stellen Sie sicher, dass sich die Repo-URL im Formular befindet

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

im Gegensatz zu

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

Um die Repo-URL anzuzeigen, führen Sie Folgendes aus:

git remote show Origin

Sie können die URL mit ändern:

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

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

270
First Zero

Dauerhafte Authentifizierung mit Git-Repositories,

Führen Sie den folgenden Befehl aus, um die Zwischenspeicherung 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>

Verwendung sollte auch angeben Zwischenspeicherung ablaufen ,

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

Nach dem Aktivieren der Zwischenspeicherung der Berechtigungsnachweise wird sie für 7200 Sekunden (2 Stunden) zwischengespeichert.

Hinweis: Credential Helper, der das unverschlüsselte Kennwort auf der lokalen Festplatte speichert. 

144
Jay Patel

Wenn Sie Ihre SSH-Schlüssel bereits eingerichtet haben und immer noch die Kennwort-Eingabeaufforderung erhalten, stellen Sie sicher, dass sich Ihre Repo-URL im Formular befindet

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

im Gegensatz zu

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

Um die Repo-URL anzuzeigen, führen Sie Folgendes aus:

git remote show Origin

Sie können die URL mit git remote set-url wie folgt ändern:

git remote set-url Origin git+ssh://[email protected]/username/reponame.git
106
Eric P

Verwenden Sie einfach die --repo-Option für den git Push-Befehl. So was:

$ git Push --repo https://name:[email protected]/name/repo.git
36
Pavel

Unbegrenzt sparen

Sie können den git-credential-store via verwenden 

git config credential.helper store

welche Ihr Passwort unverschlüsselt im Dateisystem speichert :

Mit diesem Helfer werden Ihre Kennwörter unverschlüsselt auf der Festplatte gespeichert und nur durch Dateisystemberechtigungen geschützt. Wenn dies keine akzeptable Sicherheitsüberprüfung darstellt, versuchen Sie git-credential-cache oder suchen Sie einen Helfer, der sich in den sicheren Speicher Ihres Betriebssystems einfügt. 

Mit einem Timeout

Verwenden Sie den git-credential-cache , der das Kennwort standardmäßig 15 Minuten lang speichert.

git config credential.helper cache

um ein anderes Timeout einzustellen, verwenden Sie --timeout (hier 5 Minuten).

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

Sicheres Speichern auf unbegrenzte Zeit (OS X und Windows)

  • Wenn Sie einen Mac verwenden, verfügt Git über einen Modus "osxkeychain", der Anmeldeinformationen im sicheren Schlüsselbund speichert, der Ihrem Systemkonto zugeordnet ist. Bei dieser Methode werden die Anmeldeinformationen auf der Festplatte gespeichert, und sie verfallen nie. Sie werden jedoch mit demselben System verschlüsselt, das HTTPS-Zertifikate und Safari-Auto-Fills speichert.
  • Wenn Sie Windows verwenden, können Sie einen Helper namens "Git Credential Manager für Windows" installieren.} Dies ähnelt dem oben beschriebenen "osxkeychain" -Helper, verwendet jedoch den Windows Credential Store zur Steuerung vertraulicher Informationen. Sie finden es unter https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [betont meine]
14
serv-inc

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

[email protected]:org/repo.git  

Switching hat das Problem für mich gelöst!

8
ishan

Verbinden Sie Ihren Git-Client mit dem Speicher für Ihr Betriebssystem für Anmeldeinformationen. In Windows binden Sie beispielsweise den Credential Helper an wincred:

git config --global credential.helper wincred

Gibt es eine Möglichkeit, die Kennworteingabe zu überspringen, wenn https: // auf GitHub verwendet wird?

5
Daniel

Ich wollte nur etwas auf die oben erwähnte Lösung hinweisen:

git config credential.helper store

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

4
TrollAxeThrower

Unter Windows verwenden Sie stattdessen diese Option. 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

Ich verwendete die Antwort, die Pavel vorschlug, und sie funktionierte für mich. Mein Unterschied war, es so zu tun, während ich die Fernbedienung hinzufügte: git remote add (alias) https://(name:password)@github.com/(the remote address).git

3
dsmryder

Meine Lösung unter Windows:

  1. Klicken Sie mit der rechten Maustaste auf das Verzeichnis, und drücken Sie "Git Bash Here".
  2. ssh-keygen -t rsa (für alle Werte die Eingabetaste drücken)
  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 Ihren SSH-Schlüssel dort ein => Speichern
2
Мони Мон

Durch Ausführen des folgenden Befehls wurde das Problem für mich gelöst.

git config --global credential.helper wincred

Bitte beachten Sie die nachstehende Github-Dokumentation:

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

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

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, Dort einfügen, benennen und speichern (wenn Sie keine solche Datei haben, erstellen Sie eine für sich selbst mit ssh-keygen -t rsa - nur Enter für alle Eingabeaufforderungen) ;
  5. Gehen Sie in Ihr lokales Repository und aktualisieren Sie Ihre Fernbedienung mit git remote set-url Origin git+ssh://[email protected]/username/reponame.git - Sie können dies zuerst mit git remote -v) Überprüfen.
  6. Los geht's, nur touch t; git add t; git commit -m "test"; git Push Und bestätigen Sie mit Ja, um die passwortfreie Welt zu genießen.

passwd ENCRYPTED mit einem Keystore

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

Versuchen Sie es verschlüsseln als

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.

2
Hearen

Schritt 1 -

Erstellen Sie SSH-Schlüssel auf Ihrem Linux-System, indem Sie den folgenden Befehl verwenden

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

Sie werden nach Passphrase und Dateinamen gefragt (Standardwert 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 github account ssh 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]: benutzername/repo_name.git zu Ihrem lokalen Git-Repo hinzu, indem Sie den folgenden Befehl verwenden.

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

Das ist es.

1
Anil Agrawal

All dies entsteht, weil git in den Befehlen clone/pull/Push/fetch keine Option zum Senden der Anmeldeinformationen über eine Pipe bietet. Es gibt zwar credential.helper, speichert es jedoch im Dateisystem oder erstellt einen Dämon usw. Häufig handelt es sich bei den Berechtigungsnachweisen von GIT um Systemebenen. Um sie sicher zu halten, muss die Anwendung die git-Befehle aufrufen. Sehr unsicher.

Hier ist was ich umgehen musste. 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 aus dem Format http: // {myuser} @ {my_repo_ip_address}/{myrepo_name.git} in http: // {myuser}: {mypwd} @ {my_repo_ip_address} geändert haben /{myrepo_name.git}

Bereinigen Sie dann das Repository des Passworts wie im nächsten Abschnitt.

BEREINIGEN 

Nun, das wäre gegangen und

  1. das Passwort in git remote Origin geschrieben. Geben Sie "git remote -v" ein, um den Schaden zu sehen. Korrigieren Sie dies, indem Sie die entfernte Origin-URL ohne Kennwort festlegen. "git remote set_url Origin http: // {myuser} @ {my_repo_ip_address}/{meinrepo_name.git}" 
  2. das Passwort in .git/logs im Repository geschrieben. Ersetzen Sie alle Instanzen von pwd mit einem Unix-Befehl wie find .git/logs -exec sed -is/{my_url_with_pwd} // g '{} \; Hier ist {my_url_with_pwd} die URL mit dem Kennwort. Da es sich bei der URL um Schrägstriche handelt, müssen zwei Schrägstriche verwendet werden. Zum Beispiel für die URL http: // kris: [email protected]168.0.1/proj.git -> http: \\/\\/kris: [email protected] \\/proj.git

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

GIT FETCH/PULL/Push

  1. setze das Passwort in der git remote-URL folgendermaßen: "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 Bereinigung wie im vorherigen Abschnitt durch. Nicht verpassen.
1
Krishna

Wenn Ihr PC sicher ist oder Sie sich nicht für die Passwortsicherheit interessieren, kann dies sehr einfach erreicht werden. Wenn sich das Remote-Repository auf GitHub befindet und Origin Ihr lokaler Name für das Remote-Repository ist, verwenden Sie diesen Befehl

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

Das Flag --Push stellt sicher, dass hierdurch nur die URL des Repositorys für den Befehl git Push geändert wird. (Die Frage, die im ursprünglichen Beitrag gestellt wurde, betrifft nur den Befehl git Push. Die Angabe eines Benutzernamens + Kennworts nur für Push-Vorgänge ist das normale Setup für public - Repositorys auf GitHub. Beachten Sie, dass private - Repositorys auf GitHub ebenfalls erforderlich sind einen Benutzernamen + ein Kennwort für Abruf- und Abrufvorgänge, sodass Sie für ein privates Repository nicht den --Push flag ... verwenden möchten.

WARNUNG: Dies ist von Natur aus unsicher, weil:

  1. ihr Internetdienstanbieter oder jeder, der Ihre Netzwerkzugriffe protokolliert, kann das Kennwort in Klartext in der URL anzeigen.

  2. jeder, der Zugriff auf Ihren PC hat, kann Ihr Passwort mit git remote show Origin anzeigen.

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

Selbst ein SSH-Schlüssel ist nicht absolut sicher. Jeder, der Zugriff auf Ihren PC erhält, kann beispielsweise noch Pushs ausführen, die Ihr Repository ruinieren, oder - noch schlimmer - Push-Commits, indem Sie geringfügige Änderungen an Ihrem Code vornehmen. (Alle Push-Commits sind offensichtlich auf GitHub sehr gut sichtbar. Wenn jedoch jemand Ihren Code unbemerkt ändern wollte, könnte er einen vorherigen Commit --amenden, ohne die Commit-Nachricht zu ändern, und dann Push erzwingen. Dies wäre stealthy und in der Praxis recht schwer zu bemerken .)

Aber das Verraten Ihres Passworts ist schlechter. Wenn ein Angreifer Kenntnis von Ihrem Benutzernamen + Kennwort erlangt, kann er beispielsweise Ihr eigenes Konto sperren, Ihr Konto löschen, das Repository dauerhaft löschen usw.


Alternativ - zur Vereinfachung der Sicherheit und - können Sie nur Ihren Benutzernamen in der URL angeben, so dass Sie Ihr Passwort jedes Mal eingeben müssen, wenn Sie git Push, aber nicht jedes Mal Ihren Benutzernamen angeben müssen. (Ich mag diesen Ansatz sehr, da ich das Passwort eingeben muss, wenn ich git Push nachdenke, um nachzudenken. Ich kann also nicht aus Versehen git Push.)

git remote set-url --Push Origin https://<username>@github.com/<repo>
1
radfast

Es scheint, dass es zumindest bei der 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]
0
EquipDev

Sie müssen einen privaten SSH-Schlüssel einrichten. Sie können diese Seite überprüfen. Wie wird das Setup auf einem Mac durchgeführt? Wenn Sie Linux verwenden, sollte der Leitfaden fast gleich sein. Unter Windows benötigen Sie ein Tool wie . MSYS .

0
RageZ