Ich habe kürzlich auf die Synchronisierung meiner Repositorys mit https: // auf GitHub umgestellt (aufgrund von Firewall-Problemen) und jedes Mal wird ein Kennwort abgefragt.
Gibt es eine Möglichkeit, die Anmeldeinformationen zwischenzuspeichern, anstatt sie jedes Mal zu authentifizieren, wenn git Push
?
Seit Git 1.7.9 (veröffentlicht Ende Januar 2012) gibt es in Git einen sauberen Mechanismus, mit dem Sie vermeiden können, Ihr Kennwort für HTTP/HTTPS ständig eingeben zu müssen. Er heißt Anmeldeinformationshilfen . (Vielen Dank an dazonic , dass Sie in den Kommentaren unten auf diese neue Funktion hingewiesen haben.)
Mit Git 1.7.9 oder höher können Sie nur eine der folgenden Anmeldeinformationshilfen verwenden:
git config --global credential.helper cache
... was Git anweist, Ihr Passwort für (standardmäßig) 15 Minuten im Speicher zu behalten. Sie können ein längeres Timeout einstellen mit:
git config --global credential.helper "cache --timeout=3600"
(Dieses Beispiel wurde in der GitHub-Hilfeseite für Linux vorgeschlagen.) Sie können Ihre Anmeldeinformationen auch dauerhaft speichern, wenn dies gewünscht wird. Weitere Antworten finden Sie weiter unten.
GitHubs Hilfe schlägt ebenfalls vor Wenn Sie unter Mac OS X arbeiten und Homebrew zur Installation von Git verwenden, können Sie den nativen Mac OS X-Keystore mit folgenden Komponenten verwenden:
git config --global credential.helper osxkeychain
Für Windows gibt es einen Helfer namens Git Credential Manager für Windows oder wincred in msysgit .
git config --global credential.helper wincred # obsolete
Mit Git für Windows 2.7.3 + (März 2016):
git config --global credential.helper manager
Für Linux können Sie verwenden Sie gnome-keyring
(oder eine andere Schlüsselring-Implementierung wie KWallet).
In Git-Versionen vor 1.7.9 ist diese sicherere Option nicht verfügbar, und Sie müssen die URL ändern, die Ihre Origin
-Remote verwendet, um das Kennwort auf folgende Weise einzuschließen:
https://you:[email protected]/you/example.git
... mit anderen Worten mit :password
nach dem Benutzernamen und vor dem @
.
Sie können eine neue URL für Ihre Origin
-Remote einrichten mit:
git config remote.Origin.url https://you:[email protected]/you/example.git
Stellen Sie sicher, dass Sie https
verwenden, und beachten Sie, dass in diesem Fall Ihr GitHub-Passwort im Klartext in Ihrem .git
-Verzeichnis gespeichert wird, was natürlich unerwünscht ist.
Ein alternativer Ansatz besteht darin, Ihren Benutzernamen und Ihr Kennwort in Ihre ~/.netrc
-Datei einzufügen. Wie bei der Speicherung des Kennworts in der Remote-URL bedeutet dies jedoch, dass Ihr Kennwort im Klartext auf der Festplatte gespeichert wird und somit weniger sicher ist und nicht zu empfehlen. Wenn Sie jedoch diesen Ansatz wählen möchten, fügen Sie Ihrem ~/.netrc
die folgende Zeile hinzu:
machine <hostname> login <username> password <password>
... Ersetzen Sie <hostname>
durch den Hostnamen des Servers und <username>
und <password>
durch Ihren Benutzernamen und Ihr Passwort. Denken Sie auch daran, restriktive Dateisystemberechtigungen für diese Datei festzulegen:
chmod 600 ~/.netrc
Beachten Sie, dass diese Datei unter Windows den Namen _netrc
haben sollte und Sie möglicherweise die Umgebungsvariable% HOME% definieren müssen. Weitere Informationen finden Sie unter:
Sie können Git auch veranlassen, Ihre Anmeldeinformationen dauerhaft zu speichern, indem Sie Folgendes verwenden:
git config credential.helper store
Hinweis: Während dies praktisch ist, speichert Git Ihre Anmeldeinformationen im Klartext in einer lokalen Datei (.git-Anmeldeinformationen) unter Ihrem Projektverzeichnis (siehe unten für das "Ausgangsverzeichnis"). Wenn Ihnen das nicht gefällt, löschen Sie diese Datei und verwenden Sie die Cache-Option.
Wenn Sie möchten, dass Git Sie jedes Mal, wenn eine Verbindung zum Remote-Repository hergestellt werden muss, erneut nach Anmeldeinformationen fragt, können Sie den folgenden Befehl ausführen:
git config --unset credential.helper
Um die Passwörter in .git-credentials
im Gegensatz zum Projektverzeichnis in Ihrem %HOME%
-Verzeichnis zu speichern, verwenden Sie das Flag --global
git config --global credential.helper store
Das Speichern eines Kennworts für eine Git-Repository-HTTPS-URL ist unter Windows mit einem _~/.netrc
_ (Unix) oder _%HOME%/_netrc
_ (beachten Sie den __
_) möglich.
Aber: Diese Datei würde Ihr Passwort im Klartext speichern.
Lösung: Verschlüssle diese Datei mit GPG (GNU Privacy Guard) und lasse Git jedes Mal entschlüsseln, wenn es ein Passwort benötigt (für Push
/pull
/fetch
/clone
(Vorgang).
Hinweis: Mit Git 2.18 (Q2 2018) können Sie jetzt das GPG anpassen, das zum Entschlüsseln der verschlüsselten _.netrc
_ -Datei verwendet wird.
Siehe commit 786ef5 , commit f07eeed (12. Mai 2018) von Luis Marsano (``) .
(Zusammengeführt von Junio C Hamano - gitster
- in Festschreiben 017b7c5 , 30. Mai 2018)
_
git-credential-netrc
_: Akzeptiere die Optiongpg
_
git-credential-netrc
_ wurde unabhängig von der Option "gpg.program" fest mit "gpg
" entschlüsselt.
Dies ist ein Problem bei Distributionen wie Debian, die modernes GnuPG als etwas anderes bezeichnen, wie '_gpg2
_'.
Mit Windows:
(Git hat einen _gpg.exe
_ in seiner Distribution, aber wenn Sie eine vollständige GPG-Installation verwenden, ist ein _gpg-agent.exe
_ enthalten, mit dem Sie sich Ihre Passphrase merken können, die Ihrem GPG-Schlüssel zugeordnet ist.)
Installieren Sie gpg4Win Lite
, die minimale Gnupg-Befehlszeilenschnittstelle (verwenden Sie neueste gpg4win-Vanilla-2.X.Y-betaZZ.exe
), und vervollständigen Sie Ihre PFAD mit dem GPG-Installationsverzeichnis:
_set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
_
(Beachten Sie den Befehl 'copy
': Git benötigt ein Bash-Skript, um den Befehl 'gpg
' auszuführen. Da _gpg4win-Vanilla-2
_ mit _gpg2.exe
_ geliefert wird, müssen Sie ihn duplizieren. )
Erstellen oder importieren Sie einen GPG-Schlüssel und vertrauen Sie ihm:
_gpgp --import aKey
# or
gpg --gen-key
_
(Stellen Sie sicher, dass Sie diesem Schlüssel eine Passphrase geben.)
Installieren Sie das Hilfsskript für Anmeldeinformationen in einem Verzeichnis in Ihrem _%PATH%
_:
_cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
_
(Ja, dies ist ein Bash-Skript, aber es funktioniert unter Windows, da es von Git aufgerufen wird.)
Erstellen Sie eine _netrc-Datei im Klartext
_machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
_
(Vergessen Sie nicht den Teil "protocol
": "http
" oder "https
", je nachdem, welche URL Sie verwenden.)
Verschlüssle diese Datei:
_gpg -e -r a_recipient _netrc
_
(Sie können jetzt die __netrc
_ -Datei löschen , wobei nur die __netrc.gpg
_ -verschlüsselte Datei erhalten bleibt.)
Verwenden Sie diese verschlüsselte Datei:
_git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
_
(Beachten Sie, dass '_/
_': _C:\path\to...
_ überhaupt nicht funktioniert.) (Sie können zuerst _-v -d
_ verwenden, um zu sehen, was gerade passiert.)
Von nun an entschlüsselt jeder Git-Befehl, der eine HTTP (S) -URL verwendet, die eine Authentifizierung erfordert, diese __netrc.gpg
_ -Datei und verwendet das Login/Passwort des Servers, mit dem Sie sich in Verbindung setzen. Beim ersten Mal werden Sie von GPG nach der Passphrase Ihres GPG-Schlüssels gefragt, um die Datei zu entschlüsseln. In den anderen Fällen stellt der gpg-agent wird automatisch gestartet beim ersten GPG-Aufruf diese Passphrase für Sie bereit.
Auf diese Weise können Sie mehrere URLs/Logins/Passwörter in einer Datei speichern und verschlüsselt auf Ihrer Festplatte speichern.
Ich finde es praktischer als einen "Cache" -Helfer, bei dem Sie sich (einmal pro Sitzung) ein anderes Kennwort für jeden Ihrer Remote-Dienste merken und eingeben müssen, damit das Kennwort im Speicher zwischengespeichert wird.
Es gibt eine einfache, altmodische Möglichkeit, Benutzeranmeldeinformationen in einer HTTPS-URL zu speichern:
https://user:[email protected]/...
Sie können die URL mit git remote set-url <remote-repo> <URL>
ändern.
Der offensichtliche Nachteil dieses Ansatzes ist, dass Sie das Passwort im Klartext speichern müssen. Sie können immer noch nur den Benutzernamen eingeben (https://[email protected]/...
), was Ihnen mindestens die Hälfte des Aufwandes erspart.
Möglicherweise möchten Sie lieber zu SSH wechseln oder die GitHub-Client-Software verwenden.
Verwenden Sie einen Anmeldeinformationsspeicher.
Für Git 2.11+ unter OS X und Linux , benutze Gits eingebauten Credential Store :
git config --global credential.helper libsecret
Für msysgit 1.7.9+ unter Windows :
git config --global credential.helper wincred
Für Git 1.7.9+ unter OS X verwenden Sie:
git config --global credential.helper osxkeychain
Sie können nur verwenden
_git config credential.helper store
_
Wenn Sie das nächste Mal ein Passwort mit pull oder Push eingeben, wird es als Klartext in der Datei .git-credentials gespeichert (etwas unsicher, aber nur in einen geschützten Ordner).
Und das war's, wie auf dieser Seite angegeben:
Fügen Sie einfach die Anmeldeinformationen als Teil der URL hinzu:
git remote rm Origin
git remote add Origin https://username:[email protected]/path/to/repo.git
Hinweis: Ich empfehle diese Methode nicht, aber wenn Sie sich in Rush befinden und nichts anderes funktioniert, können Sie diese Methode verwenden.
Mir war nicht sofort klar, dass ich zuerst den Helfer herunterladen musste! Ich fand den credential.helper-Download unter Atlassians permanente Authentifizierung mit Git-Repositorys .
Quote:
Befolgen Sie diese Schritte, wenn Sie Git mit Anmeldeinformations-Caching unter OS X verwenden möchten:
Laden Sie die Binärdatei git-credential-osxkeychain herunter.
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Binärdatei ausführbar ist:
chmod a+x git-credential-osxkeychain
Legen Sie es in das Verzeichnis /usr/local/bin
.
Führen Sie den folgenden Befehl aus:
git config --global credential.helper osxkeychain
Auf einem GNU/Linux-Setup funktioniert ein ~/.netrc auch ganz gut:
$ cat ~/.netrc
machine github.com login lot105 password howsyafather
Es kann davon abhängen, welche Netzwerkbibliotheken Git für den HTTPS Transport verwendet.
Für Windows können Sie das Git Credential Manager (GCM) Plugin verwenden. Es wird derzeit von Microsoft verwaltet. Das Schöne daran ist, dass das Kennwort im Windows-Anmeldeinformationsspeicher gespeichert wird und nicht als einfacher Text.
Auf der Releases-Seite des Projekts befindet sich ein Installationsprogramm. Dadurch wird auch die offizielle Version von Git für Windows mit dem integrierten Anmeldeinformations-Manager installiert. Es erlaubt Zwei-Faktor-Authentifizierung für GitHub (und andere Server). Und verfügt über eine grafische Oberfläche für die erstmalige Anmeldung.
Für Cygwin-Benutzer (oder Benutzer, die bereits das offizielle Git für Windows verwenden) ist möglicherweise die manuelle Installation vorzuziehen. Laden Sie das Zip-Paket von der Veröffentlichungsseite herunter. Extrahieren Sie das Paket und führen Sie die Datei install.cmd
aus. Dies wird in Ihrem ~/bin
Ordner installiert. (Stellen Sie sicher, dass sich Ihr ~/bin
-Verzeichnis in Ihrem PATH befindet.) Sie konfigurieren es dann mit dem folgenden Befehl:
git config --global credential.helper manager
Git führt dann den git-credential-manager.exe
aus, wenn es sich bei einem Server authentifiziert.
Wenn Sie Ihr Passwort nicht im Klartext speichern möchten, wie Mark es gesagt hat, können Sie zum Abrufen eine andere GitHub-URL verwenden als zum Pushen. In Ihrer Konfigurationsdatei unter [remote "Origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Beim Pushen wird weiterhin nach einem Kennwort gefragt, beim Abrufen jedoch nicht, zumindest bei Open Source-Projekten.
Sie können Ihr eigenes persönliches API-Token ( OAuth ) erstellen und es genauso verwenden, wie Sie Ihre normalen Anmeldeinformationen verwenden würden (at : /settings/tokens
). Zum Beispiel:
git remote add fork https://[email protected]/foo/bar
git Push fork
.netrc
Eine andere Methode besteht darin, Ihren Benutzer/Ihr Kennwort in ~/.netrc
(_netrc
unter Windows) zu konfigurieren, z.
machine github.com
login USERNAME
password PASSWORD
Fügen Sie für HTTPS die folgende zusätzliche Zeile hinzu:
protocol https
Um Ihr GitHub-Passwort in Git zwischenzuspeichern, wenn Sie HTTPS verwenden, können Sie ein Hilfsprogramm für Anmeldeinformationen verwenden, um Git anzuweisen, sich Ihren GitHub-Benutzernamen und Ihr Passwort jedes Mal zu merken, wenn es spricht zu GitHub.
git config --global credential.helper osxkeychain
(osxkeychain helper
ist erforderlich),git config --global credential.helper wincred
git config --global credential.helper cache
Verbunden:
Sie können Anmeldeinformationshilfen verwenden.
git config --global credential.helper 'cache --timeout=x'
dabei ist x
die Anzahl der Sekunden.
Nachdem Sie das Repository repo
geklont haben, können Sie repo/.git/config
bearbeiten und folgende Konfiguration hinzufügen:
[user]
name = you_name
password = you_password
[credential]
helper = store
Dann werden Sie nicht mehr nach username
und password
gefragt.
Ich weiß, dass dies keine sichere Lösung ist, aber manchmal brauchen Sie nur eine einfache Lösung - ohne etwas anderes zu installieren. Und da helper = store bei mir nicht funktioniert hat, habe ich einen Dummy-Helfer erstellt:
Erstellen Sie ein Skript und legen Sie es in Ihrem Benutzerordner ab, hier mit dem Namen credfake. Dieses Skript wird Ihren Benutzernamen und Ihr Passwort bereitstellen:
#!/bin/bash
while read line
do
echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345
mach es ausführbar:
chmod u+x /home/mahuser/bin/credfake
dann konfiguriere es in git:
git config --global credential.helper /home/mahuser/bin/credfake
(oder benutze es ohne --global nur für das eine Repo)
und - voilá - git verwendet diesen Benutzer + Passwort.
Anstelle des Kontokennworts sollte ein Authentifizierungstoken verwendet werden. Gehen Sie zu GitHub-Einstellungen/-Anwendungen und erstellen Sie ein persönliches Zugriffstoken. Das Token kann genauso verwendet werden, wie ein Kennwort verwendet wird.
Das Token soll Benutzern ermöglichen, das Kontokennwort nicht für die Projektarbeit zu verwenden. Verwenden Sie das Kennwort nur, wenn Sie Verwaltungsaufgaben ausführen, z. B. das Erstellen neuer Token oder das Widerrufen alter Token.
Anstelle eines Tokens oder Kennworts, das einem Benutzer vollständigen Zugriff auf ein GitHub-Konto gewährt, kann ein projektspezifischer Bereitstellungsschlüssel verwendet werden, um den Zugriff auf ein einzelnes Projektrepository zu gewähren. Ein Git-Projekt kann in den folgenden Schritten für die Verwendung dieses anderen Schlüssels konfiguriert werden, wenn Sie weiterhin mit Ihrem normalen Berechtigungsnachweis auf andere Git-Konten oder -Projekte zugreifen können:
Host
, IdentityFile
für den Bereitstellungsschlüssel, möglicherweise das UserKnownHostsFile
und möglicherweise das User
enthält (obwohl ich glaube, dass Sie es nicht benötigen) ).ssh -F /path/to/your/config $*
ist.GIT_SSH=/path/to/your/wrapper
vor Ihren normalen Git-Befehl. Hier muss der git remote
(Origin) das [email protected]:user/project.git
-Format verwenden.Es ist aus Sicherheitsgründen besser, Anmeldeinformationen zu verwenden, aber Sie können sie mithilfe des Caches einige Zeit aufbewahren:
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
Ihre Anmeldeinformationen werden für 3600 Sekunden gespeichert.
Die Dinge sind ein wenig anders, wenn Sie Zwei-Faktor-Authentifizierung verwenden, wie ich es bin. Da ich anderswo keine gute Antwort gefunden habe, werde ich eine hier einfügen, damit ich sie später vielleicht finde.
Wenn Sie die Zwei-Faktor-Authentifizierung verwenden, funktioniert die Angabe von Benutzername/Passwort nicht einmal - Ihnen wird der Zugriff verweigert. Sie können jedoch ein Anwendungszugriffstoken verwenden und das Hilfsprogramm für Anmeldeinformationen von Git verwenden, um es für Sie zwischenzuspeichern. Hier sind die relevanten Links:
Und ich erinnere mich nicht, wo ich das gesehen habe, aber wenn Sie nach Ihrem Benutzernamen gefragt werden, kleben Sie dort das Zugriffstoken für die Anwendung ab. Dann lassen Sie das Passwort leer. Es hat auf meinem Mac funktioniert.
Normalerweise haben Sie eine entfernte URL,
git remote -v
Origin https://gitlab.com/username/Repo.git (fetch)
Origin https://gitlab.com/username/Repo.git (Push)
Wenn Sie bei der Verwendung von git Push
Benutzernamen und Passwort überspringen möchten, versuchen Sie Folgendes:
git remote set-url Origin https://username:[email protected]/username/Repo.git
Ich habe Origin gerade die gleiche URL (mit Benutzerdetails, einschließlich Passwort) hinzugefügt.
HINWEIS: Es funktioniert nicht, wenn der Benutzername eine E-Mail-ID ist.
git remote -v
Origin https://username:[email protected]/username/Repo.git (fetch)
Origin https://username:[email protected]/username/Repo.git (Push)
Das funktioniert bei mir mit Windows 10
git config --global credential.helper wincred
Ich habe meine Antwort von gitcredentials (7) Manual Page erhalten. In meinem Fall enthält meine Windows-Installation keinen Cache für Anmeldeinformationen. Ich benutze Credential-Store.
Nachdem ich credential-store verwendet habe, werden der Benutzername/das Passwort in der Datei [user folder] /. Git-credentials gespeichert. Um den Benutzernamen/das Passwort zu entfernen, löschen Sie einfach den Inhalt der Datei.
Die composer Dokumentation Erwähnungen dass Sie verhindern können, dass die GitHub API verwendet wird, so dass sie sich wie git clone
verhält:
Wenn Sie den
no-api
-Schlüssel in einem GitHub-Repository auftrue
setzen, wird das Repository wie bei jedem anderen Git-Repository geklont, anstatt die GitHub-API zu verwenden. Im Gegensatz zur direkten Verwendung des Treibersgit
wird composer weiterhin versuchen, GitHubs Zip-Dateien zu verwenden.
Der Abschnitt würde also so aussehen:
"repositories": [
{
"type": "vcs",
"no-api": true,
"url": "https://github.com/your/repo"
}
],
Denken Sie daran, dass die API aus einem bestimmten Grund zur Verfügung steht. Es sollte sich also um ein letztes Mittel handeln, um die erhöhte Auslastung von github.com zu berücksichtigen.
Sie bearbeiten auch die Datei bashrc und fügen ein Skript hinzu.
Dies würde Sie einmal nach Ihrem Passwort fragen, wenn Sie Git starten und es sich dann merken, bis Sie sich abmelden.
SSH_ENV=$HOME/.ssh/environment
# Start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# Spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi