it-swarm.com.de

Gibt es eine Möglichkeit, GitHub-Anmeldeinformationen für Push-Commits zwischenzuspeichern?

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?

1786
Zepplock

Mit Git Version 1.7.9 und höher

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).

Mit Git-Versionen vor 1.7.9

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.

Mit jeder Git-Version (na ja, seit Version 0.99)

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:

2301
Mark Longair

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
693
Giri Alwar

TLDR; Verwenden Sie eine verschlüsselte Netrc-Datei mit Git 1.8.3 +.

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 Option gpg

_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_'.


Schritt-für-Schritt-Anleitung für Windows

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.)

  • Vertraue diesem Schlüssel

  • 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.

94
VonC

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.

40
wortwart

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
39
roo2

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:

git-credential-store

37
sgoran

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.

23
Tarun Gupta

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
22
Ben

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.

19
helloPiers

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.

16
Nadeem Khedr

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.

12
MatrixFrog

OAuth

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

Ein Ausweishelfer

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.

  • Mac: git config --global credential.helper osxkeychain (osxkeychain helper ist erforderlich),
  • Windows: git config --global credential.helper wincred
  • Linux und andere: git config --global credential.helper cache

Verbunden:

11
kenorb

Sie können Anmeldeinformationshilfen verwenden.

git config --global credential.helper 'cache --timeout=x'

dabei ist x die Anzahl der Sekunden.

9
Charan

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.

8
Xiaorong Liao

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.

7
bebbo

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:

  1. Schreiben Sie eine SSH-Konfigurationsdatei, die das 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) ).
  2. Schreiben Sie ein SSH-Wrapper-Shell-Skript, das praktisch ssh -F /path/to/your/config $* ist.
  3. Stellen Sie 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.
6
minghua

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.

6

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.

5
JnBrymn

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)
4
Nayagam

Das funktioniert bei mir mit Windows 10

git config --global credential.helper wincred
3
Mostafa Nawara

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.

3
Mike Lin

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 auf true setzen, wird das Repository wie bei jedem anderen Git-Repository geklont, anstatt die GitHub-API zu verwenden. Im Gegensatz zur direkten Verwendung des Treibers git 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.

2
sebastianwagner

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
2
ThePatelGuy