Ist es notwendig, das persönliche Zugriffstoken nach der Generierung in GitHub irgendwo lokal auf der Maschine zu speichern?
Wenn ja, gibt es eine bevorzugte Aufbewahrungsmöglichkeit?
Krzysztof Słowiński
Ist es notwendig, das persönliche Zugriffstoken nach der Generierung in GitHub irgendwo lokal auf der Maschine zu speichern?
Wenn ja, gibt es eine bevorzugte Aufbewahrungsmöglichkeit?
VonC
Der halbe Sinn von Passwörtern besteht darin, dass Sie sie sich (idealerweise) merken und das System sie hasht, sodass sie niemals irgendwo im Klartext gespeichert werden.
Doch das persönliche Zugriffstokensystem von GitHub scheint Sie im Grunde dazu zu zwingen, das Token im Klartext zu speichern?
Zuerst ein PAT (Personal Access Token) ist kein einfaches Passwort, sondern ein Äquivalent, das:
Das unterscheidet sich von Ihrem Passwort, das nur für Ihr Konto gilt und nicht ohne weiteres geändert werden kann Auch Ändern Sie es überall dort, wo Sie es verwenden.
Da ein PAT anstelle eines Passworts verwendet werden kann, wenn Sie Git-Operationen über HTTPS mit Git in der Befehlszeile oder der API ausführen, können Sie a Git-Credential-Helfer um es sicher zwischenzuspeichern.
Unter Windows würde dies beispielsweise den Windows Credential Manager über die verwenden GCM – Git Credential Manager – für Windows, Mac oder Linux:
git config --global credential.helper manager-core
Wenn Sie zum ersten Mal zu einem Repo pushen, werden Sie in einem Popup nach Ihren Anmeldeinformationen gefragt: Benutzername und Ihr Pat.
Beim nächsten Mal wird es nicht mehr fragen und dieses PAT direkt wiederverwenden, das sicher in Ihrem Credential Manager gespeichert bleibt.
Eine ähnliche Idee gilt für Mac mit dem OSX-Schlüsselbundund Linux mit der GNOME-Schlüsselbund (im Jahr 2021 würde es eine DBus-Sitzung benötigen und libsecret
), aber im Jahr 2021 deckt GCM-Core diese Anwendungsfälle ab.
Die Idee bleibt: Speichern Sie das PAT in einem verschlüsselt Berechtigungsspeicher.
Wie oben erwähnt, ist die modernere Lösung (Q4 2020). Microsoft Git-Credential-Manager-Core
git config --global credential.helper manager-core
Sie müssen dies installieren git-credential-manager-core
Herunterladen seiner neueste Erscheinungwie gcmcore-linux_amd64.2.0.474.41365.deb
sudo dpkg -i <path-to-package>
git-credential-manager-core configure
Obwohl Sie mit GCM (Git-Credential-Manager-Core) unter Linux, wie von Mekky Mayata in den Kommentaren erwähnt, eine definieren müssen git config --global credential.credentialStore
Erste.
Sehen “Anmeldeinformationsspeicher unter Linux“:
Es gibt vier Optionen zum Speichern von Anmeldeinformationen, die Git Credential Manager (GCM) auf Linux-Plattformen verwaltet:
- freedesktop.org Geheimdienst-API
- GPG/
pass
kompatibele Dateien- Git ist integriert Berechtigungs-Cache
- Klartextdateien
Standardmäßig kommt GCM nicht konfiguriert.
Sie können auswählen, welcher Anmeldeinformationsspeicher verwendet werden soll, indem Sie festlegenGCM_CREDENTIAL_STORE
Umgebungsvariable oder diecredential.credentialStore
Git-Konfigurationseinstellung.
Wie von agent18 in notiert die Kommentareverwenden git-credential-libsecret
nach der Installation libsecret-1-0
und libsecret-1-dev
ist ein guter erster Schritt.
Aber auch das sollte jetzt abgeschlossen sein credential-manager-core
.
Die von Ihnen verlinkte GNOME-Schlüsselbundlösung funktioniert nicht für Ubuntu 20.04, da das Paket libgnome-keyring-dev ist in dieser Suite nicht verfügbar. Meinten Sie damit, dass die Linux-Unterstützung noch nicht vollständig implementiert ist? Welche Problemumgehungen werden empfohlen und wo kann ich den Fortschritt überprüfen?
– Mxt
2. Februar 2021 um 22:48 Uhr
@Mxt Der GCM-Core unterstützt jetzt Linux (github.com/microsoft/Git-Credential-Manager-Core/blob/master/…), tut es jetzt der offizielle Workaround.
– VonC
2. Februar 2021 um 23:21 Uhr
Die letzten beiden Zeilen geben mir den folgenden Fehler nach git push
: /var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/git-credential-manager-core get: 1: /var/tmp/.net/user/git-credential-manager-core/unqypyc0.awl/git-credential-manager-core: not found
– Ilja Palatschew
13. Februar 2021 um 9:56 Uhr
Beim Ausführen der obigen Befehle unter Linux funktionierte es einwandfrei, aber ich erhielt “fatal: No credential backing store has selected”. löste dies durch Bearbeiten der Git-Konfigurationsdatei git config -e --global
und Hinzufügen eines credentialStore-Werts (plaintext, gpg, secretservice) dazu. Danke @VonC
– Mekky_Mayata
26. März 2021 um 12:19 Uhr
@Mekky_Mayata Guter Punkt. Ich habe die Antwort bearbeitet, um diesen Schritt für Linux besser sichtbar zu machen, und die entsprechende Dokumentation hinzugefügt.
– VonC
26. März 2021 um 12:26 Uhr
In meinem Fall funktionierte die akzeptierte Lösung in Ubuntu nicht mit einer Meldung wie
git: ‘credential-manager’ ist kein git-Befehl
aber store
anstatt manager
gut gearbeitet:
git config --global credential.helper store
Nur um eine Anmerkung hinzuzufügen – nachdem Sie dies aktiviert haben, werden Sie bei Ihrem nächsten Commit zur Eingabe Ihrer Creds aufgefordert. Danach werden sie gespeichert.
– D3l_Gato
1. Dezember 2020 um 20:56 Uhr
Dies scheint Ihr Token im Klartext in ~/.git-credentials zu speichern
– Stanley Bak
20. Dezember 2020 um 17:45 Uhr
Ich finde es sehr hilfreich, wenn Leute zumindest einen Link bereitstellen, nachdem sie vor etwas gewarnt haben. Schauen Sie bitte Hier für hervorragende Anweisungen zum sicheren “Speichern” des PAT und zum Arbeiten mit dem Git-Workflow. Nur 3 Zeilen Code.
– Agent18
2. Mai 2021 um 19:20 Uhr
Agent18
Getestet auf Ubuntu 20.04, fast frisch installiert, mit Git 2.25.1 und Unity 7.5.
Authentifizierungsgrundlagen
Github benötigt einen Authentifizierungsschlüssel (mit bestimmten Rechten, die an diesen Authentifizierungsschlüssel gebunden sind). Ein bestimmter Authentifizierungsschlüssel hat bestimmte Rechte (Private Repos lesen, Öffentliche Repos lesen, schreiben usw.) und “fungiert als Passwort”, verbunden mit Rechten, die widerrufen werden können, wann immer der Benutzer es wünscht.
Persönliches Zugriffstoken
git push
das Repo und geben Sie das generierte Token (sehr langes Passwort) als Passwort ein, wenn Sie dazu aufgefordert werden.Speichern des Passworts auf unterschiedliche Weise
xclip
um es zurück in die Zwischenablage zu bringen und es jedes Mal einzufügen (Scheiß drauf)git config credential.helper cache <time-limit-of-cache>
. Aber Sie müssen das Passwort nach dem Zeitlimit immer noch irgendwie zwischenspeichern.git config credential.helper store
(verwenden Sie nicht –global). Dies ist NICHT VERSCHLÜSSELT. Sie können die Datei öffnen und lesen. (z. B. wenn jemand Zugriff auf Ihren Laptop erhält, kann er das Passwort ziemlich genau mit einem bootfähigen USB lesen (vorausgesetzt, Ihr gesamtes System ist nicht verschlüsselt)).sudo apt-get install libsecret-1-0 libsecret-1-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
git config credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
Dies ermöglicht das Speichern des Passworts/persönlichen Zugangstokens in einem verschlüsselten Format. Die git config
Datei finden Sie in der .git/config
Datei in Ihrem Loca-Repo wie gezeigt Hierwenn Sie es jemals brauchen.
PS Es gibt viele Stellen, die die Verwendung von vorschlagen Wichtel-Schlüsselanhänger aber das ist anscheinend veraltet.
Speichern von Passwörtern/PATs für mehr als ein Konto
Dies wird schwierig und es scheint, als würde @VonC vorschlagen, dass wir a benötigen Git-Credential-Manager core
(GCM-Kern). Diese Antwort wird basierend auf meinen Erkenntnissen in dieser Antwort verbessert.
Installieren Sie zuerst den GCM-Core
sudo dpkg -i <path-to-package>
git-credential-manager-core configure
git config --global credential.credentialStore secretservice
wie wir verwenden libsecret
Holen Sie sich den neuesten Git
In meinem Fall hatte ich git 2.25 und bekam einen Fehler error: unknown option 'show-scope'
. Es scheint, dass der GCM-Kern einen höheren Git verwendet (mindestens 2.26).
Installieren Sie also das Neueste und Beste git
gem Hier:
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
apt list git # shows the latest git currently 2.31
sudo apt-get install git #or sudo apt-get upgrade
Aktualisieren Sie den Git-Remote-Pfad mit dem integrierten Benutzernamen
Der GCM-Kern benötigt dies, um die verschiedenen Konten zu identifizieren.:(
git remote set-url origin https://[email protected]/user1/myRepo1.git
git remote set-url origin https://[email protected]/user1/myRepo1.git
^^^^^
Dein ~/.gitconfig
Datei hat also folgendes:
[credential]
helper = /usr/bin/git-credential-manager-core
credentialStore = secretservice
[credential "https://dev.azure.com"]
useHttpPath = true
Ich habe Ihre Antwort bereits positiv bewertet, aber tolles Feedback.
– VonC
5. Mai 2021 um 19:13 Uhr
musste ich benutzen git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret erase
vorher und speichern Sie dann das neue Token. Ich habe bereits libsecret verwendet
– Vimieiro
15. September 2021 um 19:39 Uhr
Ihre Antwort war nützlich, aber so viel Drama. Das war alles, was ich tat git remote set-url origin https://username:[email protected]/username/repo.git
– iKev61
3. Dezember 2021 um 15:10 Uhr
zrash
Alternativ können Sie eine erstellen ~/.netrc
Datei im Home-Verzeichnis und speichern Sie Ihre Anmeldeinformationen darin.
cat ~/.netrc
machine github.com login <login-id> password <token-password>
Aswat
Gehen Sie folgendermaßen vor, um Ihre Anmeldeinformationen im Cache zu speichern und sich nicht jedes Mal anzumelden, wenn Sie eine Git-Aktion ausführen:
git config --global --replace-all credential.helper cache
git push
oder git pull
.git push
oder eine beliebige git-Aktion und Sie werden feststellen, dass von nun an keine Anmeldedaten mehr abgefragt werden.
nbari
Ich bewahre sie gerne verschlüsselt im Repository auf und lade sie mit .envrc
(https://direnv.net/)
Dazu verwende ich ssh-Tresor um die Daten mit my zu verschlüsseln ssh-Schlüssel, die GitHub bereits verfügbar machtzum Beispiel:
echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh
Dann der Inhalt von .envrc
sieht in etwa so aus:
echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}
Dadurch werden die Daten entschlüsselt my-encrypted-vars.ssh
Datei und Set MY_TOKEN
in meine Umgebungsvariablen jedes Mal, wenn ich cd
in das Projekt dir.
Dadurch werden Token/Variablen “sicher” gespeichert und sind immer bereit, als Umgebungsvariablen verwendet zu werden
Versuchen Sie, dies zu aktivieren, um das Fortbestehen über Push / Pulls hinweg zu unterstützen
git config credential.helper store
Für das fortlaufende Klonen des Repos / für macOS-Benutzer / installieren Sie iTerm2
https://iterm2.com/
Toolbelt aktivieren
Klicken Sie einfach auf das Snippet, wann immer Sie es brauchen. PS Sie verwenden oh-my-zsh, nicht wahr?
https://github.com/ohmyzsh/ohmyzsh
Behandeln Sie Ihre Token wie Passwörter und halten Sie sie geheim. Verwenden Sie bei der Arbeit mit der API Token als Umgebungsvariablen, anstatt sie in Ihren Programmen fest zu codieren. Siehe Nummer 8 aus den offiziellen Dokumenten: help.github.com/articles/…
– Saugat
9. Oktober 2017 um 12:01 Uhr
Genau, ich habe diesen Kommentar gesehen, als ich das Zugriffstoken generiert habe, aber ich war mir nicht sicher, wie die Leute es in der Praxis schützen.
– Krzysztof Słowiński
9. Oktober 2017 um 12:05 Uhr
Das kommt mir so seltsam vor. Der halbe Sinn von Passwörtern besteht darin, dass Sie sie sich (idealerweise) merken und das System sie hasht, sodass sie niemals irgendwo im Klartext gespeichert werden. Doch das persönliche Zugriffstokensystem von GitHub scheint Sie im Grunde dazu zu zwingen, das Token im Klartext zu speichern?
– user56reinstatemonica8
24. Juli 2018 um 11:37 Uhr
Sie werden automatisch generiert und sind lang, daher ist es keine Option, sie auswendig zu lernen.
– Krzysztof Słowiński
1. August 2018 um 3:15 Uhr
Es scheint, dass GitHub gerade die Passwortauthentifizierung für deaktiviert hat
git push
und erzwingt jetzt stattdessen die Verwendung eines Tokens. Also müssen wir das Token jetzt im Klartext speichern oder ein Hilfsprogramm für Anmeldeinformationen verwenden, um es für Sie zu speichern. In jedem Fall hat eine Person, die auf Ihren Computer zugreift, jetzt Schreibzugriff auf Ihr Repo. – Damals, als ich nur ein Passwort verwenden konnte, das ich jedes Mal eingeben musste, gab es dieses besondere Sicherheitsrisiko nicht. Und vergessen wir nicht, dass jemand, der mein Passwort kennt, dieses leicht verwenden könnte, um seine eigenen Token zu erstellen. In Bezug auf die Sicherheit gewinnen wir also nichts, es sei denn, GitHub entscheidet sich auch für die Durchsetzung von 2FA.– Forivin
28. Juli 2021 um 8:21 Uhr