it-swarm.com.de

Git Push erfordert Benutzername und Passwort

Ich habe ein Git-Repository von meinem GitHub-Konto auf meinen PC geklont.

Ich möchte sowohl mit meinem PC als auch mit meinem Laptop arbeiten, aber mit einem GitHub-Account.

Wenn ich versuche, mit meinem PC auf GitHub zu pushen oder von dort zu ziehen, werden Benutzername und Passwort benötigt, aber nicht, wenn ich den Laptop benutze!

Ich möchte meinen Benutzernamen und mein Passwort nicht jedes Mal eingeben, wenn ich mit Origin interagiere. Was vermisse ich hier?

1287
TooCooL

Ein häufiger Fehler ist das Klonen mit der Standardeinstellung (HTTPS) anstelle von SSH. Sie können dies korrigieren, indem Sie in Ihr Repository gehen, auf "Klonen oder Herunterladen" klicken, dann auf die Schaltfläche "SSH verwenden" über dem URL-Feld klicken und die URL Ihrer Origin-Fernbedienung folgendermaßen aktualisieren:

git remote set-url Origin [email protected]:username/repo.git

Dies ist bei GitHub dokumentiert: mschalten von entfernten URLs von HTTPS zu SSH .

1789
Tekkub

Permanente Authentifizierung mit Git-Repositorys

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

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

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

Sie sollten auch angeben , dass das Zwischenspeichern abläuft ,

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

Nach dem Aktivieren des Anmeldeinformations-Caches wird es für 7200 Sekunden (2 Stunden) zwischengespeichert .

304
Jay Patel

Ich bin auf dasselbe Problem gestoßen, und die einfachste Lösung, die ich gefunden habe, war die Verwendung einer SSH-URL anstelle einer HTTPS-URL:

ssh://[email protected]/username/repo.git

Und nicht das:

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

Sie können jetzt mit nur den SSH-Schlüssel anstelle von username und password validieren.

127

Abgesehen von der Umstellung auf SSH können Sie auch weiterhin HTTPS verwenden, wenn es Ihnen nichts ausmacht, Ihr Kennwort im Klartext anzugeben. Gib dies in deinen ~/.netrc ein und es wird nicht nach deinem Benutzernamen/Passwort gefragt (zumindest unter Linux und Mac):

machine github.com
       login <user>
       password <password>

Zusatz (siehe VonCs zweiten Kommentar): Unter Windows lautet der Dateiname %HOME%\_netrc.

Lesen Sie auch den ersten Kommentar von VonC, falls Sie verschlüsseln möchten.

Ein weiterer Zusatz (siehe user137717s Kommentar), den Sie verwenden können, wenn Sie Git 1.7.10 oder neuer haben .

Zwischenspeichern Sie Ihr GitHub-Passwort in Git mit einem Anmeldedaten-Helfer :

Wenn Sie GitHub-Repositorys mit HTTPS klonen, können Sie Git mithilfe eines Hilfsprogramms für Anmeldeinformationen anweisen, sich bei jeder Kommunikation mit GitHub Ihren GitHub-Benutzernamen und Ihr Kennwort zu merken.

Dies funktioniert auch unter Linux, Mac und Windows.

115
rintcius

Für die Uneingeweihten, die durch die vorherigen Antworten verwirrt sind, können Sie Folgendes tun:

git remote -v

Welches wird mit so etwas reagieren

Origin    https://[email protected]/yourname/yourrepo.git (fetch)
Origin    https://[email protected]/yourname/yourrepo.git (Push)

Dann können Sie den Befehl ausführen, den viele andere vorgeschlagen haben, aber jetzt kennen Sie Ihren Namen und Ihr Repo von oben, sodass Sie einfach yourname/yourrepo.git von oben ausschneiden und einfügen können in:

git remote set-url Origin [email protected]:yourname/yourrepo.git
79
Davide

Wenn Sie SSH verwenden und Ihr privater Schlüssel mit einer Passphrase verschlüsselt ist, werden Sie beim Eingeben der Passphrase/des Passworts für den privaten Schlüssel weiterhin aufgefordert, ) Führe Netzwerkoperationen mit Git durch wie Push, pull und fetch.

Verwenden Sie ssh-agent, um die Anmeldeinformationen für die Passphrase/das Passwort des privaten Schlüssels zu speichern

Wenn Sie nicht jedes Mal Ihre Passphrase eingeben müssen, können Sie ssh-agent verwenden, um Ihre Passphrasen-Anmeldeinformationen für private Schlüssel einmal pro Terminalsitzung zu speichern, wie in meiner Antwort auf ) erläutert + Verbindung zu Ihrem Authentifizierungsagenten konnte nicht hergestellt werden :

$ eval `ssh-agent -s`
$ ssh-add

In einem Windows msysgit Bash müssen Sie die Ausgabe von ssh-agent auswerten, aber ich bin mir nicht sicher, ob Sie dies auch in anderen Entwicklungsumgebungen und Betriebssystemen tun müssen.

ssh-add sucht in Ihrem privaten Ordner .ssh nach einem privaten Schlüssel mit dem Namen id_rsa. Dies ist der Standardname. Sie können jedoch einen Dateipfad an einen Schlüssel mit einem anderen Namen übergeben.

Den Agenten töten

Wenn Sie mit Ihrer Terminalsitzung fertig sind, können Sie ssh-agent mit dem Kill-Flag -k beenden:

$ ssh-agent -k

Wie im ssh-agent Handbuch erklärt:

-k

Töten Sie den aktuellen Agenten (angegeben durch die Umgebungsvariable SSH_AGENT_PID).

Optionales Timeout

Außerdem kann ein optionaler Timeout-Parameter wie folgt angegeben werden:

$ ssh-add -t <timeout>

dabei hat <timeout> das Format <n>h für <n> Stunden, <n>m für <n> Minuten und so weiter.

Nach dem ssh-agent Handbuch :

-t life

Legen Sie einen Standardwert für die maximale Lebensdauer der dem Agenten hinzugefügten Identitäten fest. Die Lebensdauer kann in Sekunden oder in einem Zeitformat angegeben werden, das in sshd_config (5) angegeben ist. Eine für eine Identität mit ssh-add (1) angegebene Lebensdauer überschreibt diesen Wert. Ohne diese Option ist die maximale Standardlebensdauer für immer.

Auf dieser Seite finden Sie weitere Zeitformate .

Sicherheitswarnung für Cygwin-Benutzer

Cygwin-Benutzer sollten sich eines potenziellen Sicherheitsrisikos bei der Verwendung von ssh-agent in Cygwin bewusst sein:

die Leute sollten sich der potenziellen Gefahren von ssh-agent unter Cygwin 1 bewusst sein, obwohl es unter einem lokalen Netstat- und Remote-Portscan nicht so aussieht, als wäre der in/tmp/ssh-foo angegebene Port für jedermann zugänglich ...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

Und unter dem angegebenen Link :

beachten Sie jedoch, dass Cygwins Unix-Domain-Sockets FUNDAMENTAL INSECURE sind und ich daher nachdrücklich DAVON ABRATEN die Verwendung von ssh-agent unter Cygwin.

wenn Sie ssh-agent unter Cygwin ausführen, wird ein AF_UNIX-Socket im Verzeichnis /tmp/ssh-$USERNAME/ erstellt. Unter Cygwin werden AF_UNIX-Sockets über AF_INET-Sockets emuliert. Sie können dies leicht erkennen, wenn Sie die /tmp/ssh-$USERNAME/agent-socket-* -Datei über den Editor aufrufen. Du wirst so etwas sehen

!<socket >2080

dann starte netstat -a und überrasche! Sie haben ein Programm, das Port 2080 abhört. Es ist ssh-agent. Wenn ssh eine RSA-Abfrage vom Server empfängt, verweist sie auf den entsprechenden /tmp/ssh-$USERNAME/agent-socket-* (in unserem Fall unter Cygwin bedeutet dies, dass die Verbindung zu localhost:2080 geöffnet wird) und fordert ssh-agent auf, den RSA zu verarbeiten fordern Sie den privaten Schlüssel an und geben Sie die vom ssh-agent empfangene Antwort einfach an den Server weiter.

Unter Unix funktioniert ein solches Szenario problemlos, da der Unix-Kernel die Berechtigungen überprüft, wenn das Programm versucht, auf einen AF_UNIX-Socket zuzugreifen. Bei AF_INET-Sockets sind die Verbindungen jedoch anonym ("unsicher"). Stellen Sie sich vor, Sie haben den Cygwin-SSH-Agenten am Laufen. Ein böswilliger Hacker kann Ihre Box scannen, den von ssh-agent verwendeten offenen Port suchen, eine Verbindung zu Ihrem SSH-Server herstellen, die RSA-Abfrage von diesem Server empfangen, diese über einen von ihm gefundenen offenen Port an Ihren ssh-agent senden und den Port empfangen RSA-Antwort, senden Sie sie an den SSH-Server und voila, er/sie hat sich erfolgreich bei Ihrem Server als Sie angemeldet.

53
user456814

Quelle: Git einrichten

Der folgende Befehl speichert Ihr Passwort für einige Zeit im Speicher (für Git 1.7.10 oder neuer).

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
47
Sagar Rakshe

Wenn Sie https für Git Pull & Push verwenden, konfigurieren Sie einfach remote.Origin.url für Ihr Projekt, um zu vermeiden, dass Sie bei jedem Push einen Benutzernamen (oder/und ein Passwort) eingeben.

So konfigurieren Sie remote.Origin.url:

 URL-Format: 
 Https: // {Benutzername: Passwort @} github.com/ {Eigentümer}/{Repo} 
 
 Parameter in URL: 

* Nutzername 
Optional, der bei Bedarf zu verwendende Benutzername. 
 Authentifizierung, falls angegeben, muss der Benutzername nicht erneut eingegeben werden, wenn eine Authentifizierung erforderlich ist. Keine E-Mail verwenden; Verwenden Sie Ihren Benutzernamen ohne "@", andernfalls kann die URL nicht korrekt analysiert werden. * password optional, das Kennwort, das bei Bedarf zur Authentifizierung verwendet werden soll. Wenn angegeben, Es ist nicht erforderlich, das Kennwort erneut einzugeben, wenn eine Authentifizierung erforderlich ist. Tipp: Dieser Wert wird als Klartext gespeichert. Geben Sie aus Sicherheitsgründen diesen Parameter nicht an. * zB git config remote.Origin.url https: //[email protected]/eric/myproject

@Update - mit ssh

Ich denke, die Verwendung des Protokolls ssh ist eine bessere Lösung als https, obwohl der Einrichtungsschritt etwas komplexer ist.

Grobe Schritte:

  • Erstellen Sie SSH-Schlüssel mit dem Befehl ssh-keygen unter Linux. Unter Windows msysgit stellen Sie ähnliche Befehle bereit.
  • Bewahren Sie den privaten Schlüssel auf dem lokalen Computer an einem geeigneten Ort auf, z. B. ~/.ssh. Fügen Sie es über den Befehl ssh-add dem ssh-Agenten hinzu.
  • Laden Sie den öffentlichen Schlüssel auf den Git-Server hoch.
  • Ändern Sie remote.Origin.url im Git-Repository in ssh, z. B. [email protected]:myaccount/myrepo.git.
  • Wenn Sie dann ziehen oder drücken, müssen Sie niemals den Benutzernamen oder das Passwort eingeben.

Tips:

  • Wenn Ihr SSH-Schlüssel über eine Passphrase verfügt, müssen Sie diese standardmäßig bei der ersten Verwendung des Schlüssels nach jedem Neustart Ihres Computers eingeben.

@Update - Umschalten zwischen https und ssh Protokoll.

Es reicht aus, remote.Origin.url zu ändern, oder Sie können repo_home/.git/config direkt bearbeiten, um den Wert zu ändern (z. B. mit vi unter Linux).

Normalerweise füge ich für jedes Protokoll eine Zeile hinzu und kommentiere eine davon mit # aus.

z. B.

 [remote "Origin"] 
 url = [email protected]: myaccount/myrepo.git 
 # url = https: //[email protected]/myaccount/myrepo .git 
 fetch = + refs/heads/*: refs/remotes/Origin /*
31
Eric Wang

Sie können Ihr GitHub-Passwort in Git zwischenspeichern:

Folgen Sie einfach den Anweisungen von GitHub offizielle Dokumentation .

Nachdem Sie die Anweisungen über den obigen Link befolgt haben, sollten Sie in der Lage sein, Push/Pull zu/von Ihrem Repository auszuführen, ohne jedes Mal Ihren Benutzernamen/Ihr Passwort einzugeben.

15

Hier ist eine andere Option:

Anstatt zu schreiben

git Push Origin HEAD

Sie könnten schreiben:

git Push https://user:[email protected]/path HEAD

Offensichtlich führt dies bei den meisten Shells dazu, dass das Kennwort im Verlauf zwischengespeichert wird. Denken Sie also daran.

9
Lacho Tomov

Was für mich funktioniert hat, war .git/config zu bearbeiten und zu verwenden

[remote "Origin"]
        url = https://<login>:<password>@gitlab.com(...).git

Es versteht sich von selbst, dass dies eine unsichere Methode zum Speichern Ihres Kennworts ist, aber es gibt Umgebungen/Fälle, in denen dies möglicherweise kein Problem darstellt.

8
WoJ

Update für HTTPS:

GitHub hat ein neues Programm für Windows gestartet, das Ihre Anmeldeinformationen speichert, wenn Sie HTTPS verwenden:

Benutzen:

  • Laden Sie das Programm von hier herunter

  • Sobald Sie das Programm ausführen, wird es Ihre .gitconfig -Datei bearbeiten. Überprüfen Sie erneut, ob der richtige .gitconfig bearbeitet wurde, falls Sie mehrere davon haben. Wenn es nicht das richtige bearbeitet hat, fügen Sie Folgendes zu Ihrem .gitconfig hinzu

    [credential]
        helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
    

    Beachten Sie den Zeilenumbruch nach [credential]. Es ist notwendig.

  • Öffnen Sie Ihren Befehlszeilen-Client und versuchen Sie es einmal mit git Push Origin master. Wenn Sie nach einem Passwort gefragt werden, geben Sie es ein und Sie sind fertig. Passwort gespeichert!

4
Varun Achar

Sie haben grundsätzlich zwei Möglichkeiten.

Wenn Sie auf beiden Computern denselben Benutzer verwenden, müssen Sie den .pub-Schlüssel auf Ihren PC kopieren, damit GitHub weiß, dass Sie derselbe Benutzer sind.

Wenn Sie eine neue PUB-Datei für Ihren PC erstellt haben und die Computer als unterschiedliche Benutzer behandeln möchten, müssen Sie die neue PUB-Datei auf der GitHub-Website registrieren.

Wenn dies immer noch nicht funktioniert, liegt es möglicherweise daran, dass ssh nicht richtig konfiguriert ist und dass ssh den Speicherort Ihrer Schlüssel nicht findet. Versuchen

ssh -vv [email protected]

Um weitere Informationen zu erhalten, warum SSH fehlschlägt.

4
ralphtheninja

Wenn Windows Git-Benutzer nach der Ausführung von git config --global credential.helper store immer noch zur Eingabe eines Kennworts aufgefordert werden, sollten Sie mit diesem Befehl überprüfen, wo die Konfigurationsdatei abgelegt ist

git config --list --show-Origin

In meinem Fall hat es funktioniert, nachdem Sie die Konfigurationsdatei 'C:\Programme\Git\mingw64\etc\gitconfig' manuell bearbeitet und den folgenden Text hinzugefügt haben.

[credential]
    helper = store
2
Liang

Wenn der SSH-Schlüssel oder die .netrc -Datei für Sie nicht funktioniert haben, ist eine andere einfache, aber weniger sichere Lösung, die für Sie funktionieren könnte, git-credential-store - Helfer zum Speichern von Anmeldeinformationen Platte:

git config --global credential.helper store

Standardmäßig werden Anmeldeinformationen in der Datei ~/.git-credentials gespeichert. Es wird erstellt und geschrieben.

Bitte beachten Sie, dass die Verwendung dieses Hilfsprogramms Ihre Passwörter unverschlüsselt auf der Festplatte speichert und nur durch Dateisystemberechtigungen geschützt ist. Wenn dies möglicherweise kein akzeptabler Kompromiss für die Sicherheit ist.

2
rumman0786

Ich hatte das gleiche Problem.

Also habe ich die .git/config Datei von meinem Projekt geändert,

url = https://github.com/<your-user-here>/<your-repo-here>

zu

url = [email protected]:<your-user-here>/<your-repo-here>

und fügte den öffentlichen SSH-Schlüssel dem Git-Profil hinzu, das sich in der Einstellung befindet.

Für den öffentlichen SSH-Schlüssel:

cat ~/.ssh/id_rsa.pub
2
shrikant

Das hat bei mir funktioniert:

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

Beispiel:

git remote set-url Origin https://[email protected]/jsmith/master.git
1
user5854766

Sie müssen zwei Schritte ausführen -

  1. git remote remove Origin
  2. git remote add Origin [email protected]:NuggetAI/nugget.git

Beachten Sie, dass die Git-URL eine SSH-URL und keine HTTPS-URL ist.

Enter image description here

1
sapy

Aktualisieren Sie Ihre Git-Konfigurationsdatei direkt (, wenn Sie sich keine ausgefallenen Befehle merken möchten ):

Öffnen Sie Ihre .git/config -Datei in Ihrem bevorzugten Texteditor. Es befindet sich in dem Ordner, den Sie geklont haben, oder in dem Repository, in dem Sie git init ausgeführt haben. Wechseln Sie in dieses Repository. .git ist ein versteckter Ordner und drückt Ctrl + H sollte den versteckten Ordner anzeigen (ls -a im Terminal).

Unten sehen Sie ein Beispiel der Datei .git/config. Kopieren Sie diese Zeilen, fügen Sie sie ein und aktualisieren Sie sie mit Ihren Git-Informationen.

[user]
        name = Tux
        email = [email protected]
        username = happy_feet

[remote "Origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/Origin/*

Ändern Sie den URL-Teil mit dem folgenden Format für SSH:

url = [email protected]:happy_feet/my_code.git

( Die oben genannten Formate ändern sich bei verschiedenen Git-Remote-Servern wie GitHub oder Bitbucket nicht. Das gleiche gilt, wenn Sie Git für die Versionskontrolle verwenden ):

Hinweis: Für die SSH-Verbindung zu einem entfernten Git-Repository müssen Sie Ihren öffentlichen SSH-Schlüssel zu Ihrem entfernten Git-Server hinzufügen ( wie GitHub oder Bitbucket Durchsuchen Sie die Einstellungsseite nach SSH-Schlüsseln .

Informationen zum Generieren Ihrer SSH-Schlüssel finden Sie unter: Erstellen von SSH-Schlüsseln

1
Survesh Jones

Wie viele Benutzer bereits gesagt haben, müssen Sie lediglich Ihre Git-Repository-URL von HTTPS in SSH ändern.

Wenn Sie auf Ihrem Computer keinen SSH-Schlüssel generiert haben, müssen Sie dies tun.

Nur als zusätzliche Information, nach dieser Änderung wurde immer noch derselbe Fehler angezeigt:

Zugang verweigert.

In meinem Fall bestand das Problem darin, dass ich die Windows-Shell zum Ausführen des Befehls ngh verwendete. Da dieser Befehl eine Eingabeaufforderung zum Anfordern des SSH-Ausdrucks öffnen sollte und die Windows-Shell diese Art von Eingabeaufforderungen nicht öffnet, ist die Authentifizierung nur fehlgeschlagen.

Also musste ich einfach die Git-Shell öffnen und dort den Befehl ngh ausführen, die SSH-Phrase bei jeder Abfrage in die Eingabeaufforderung einfügen und "voilà" ... Es hat einfach funktioniert!

0
Thisisalexis

Wenn Sie Git (zum Beispiel Git Bash) unter Windows verwenden (und nicht von HTTPS zu SSH wechseln möchten), können Sie auch Git Credential Manager) verwenden für Windows

Diese Anwendung behält den Benutzernamen und das Passwort für Sie ...

0
boly38