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?
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 .
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 .
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.
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.
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
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
.
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.
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).
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 .
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 zulocalhost: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.
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)
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
ssh
Ich denke, die Verwendung des Protokolls ssh
ist eine bessere Lösung als https
, obwohl der Einrichtungsschritt etwas komplexer ist.
Grobe Schritte:
ssh-keygen
unter Linux. Unter Windows msysgit
stellen Sie ähnliche Befehle bereit.~/.ssh
. Fügen Sie es über den Befehl ssh-add
dem ssh-Agenten hinzu.remote.Origin.url
im Git-Repository in ssh
, z. B. [email protected]:myaccount/myrepo.git
.Tips:
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 /*
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.
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.
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.
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!
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.
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
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.
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
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
Sie müssen zwei Schritte ausführen -
git remote remove Origin
git remote add Origin [email protected]:NuggetAI/nugget.git
Beachten Sie, dass die Git-URL eine SSH-URL und keine HTTPS-URL ist.
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
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!
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 ...