The next time you are prompted for your GitHub user name and token, the information will be stored permanently in a . git-credentials file under your home folder.
You can use git-credential-store to store your passwords unencrypted on the disk, protected only by the permissions of the file system. You can check the credentials stored in the file ~/. git-credentials . For more information, visit git-credential-store - Helper to store credentials on disk.
Half the point of passwords is that (ideally) you memorize them and the system hashes them, so therefore they're never stored anywhere in plain text.
Yet GitHub's personal access token system seems to basically force you to store the token in plain text?
First, a PAT (Personal Access Token) is not a simple password, but an equivalent that:
That differs from your password, which is unique to your account, and cannot be easily changed without having to also modify it everywhere you happen to use it.
Since a PAT can be used in place of a password when performing Git operations over HTTPS with Git on the command line or the API, you can use a git credential helper to cache it securely.
On Windows, for instance, that would use the Windows Credential Manager, through the GCM-Core -- Git Credential Manager Core -- for Windows, Mac or Linux:
git config --global credential.helper manager-core
The first time you are pushing to a repo, a popup will ask for your credentials: username and your PAT.
The next time, it won't ask, and reuse directly that PAT, which remains stored securely in your Credential Manager.
A similar idea applies for Mac with the OSX keychain, and Linux with the GNOME Keyring (in 2021, it would need a DBus session and libsecret
), but in 2021, GCM-Core covers those use cases.
The idea remains: store the PAT in an encrypted credentials store.
As mentioned above, the more modern solution (Q4 2020) is Microsoft Git-Credential-Manager-Core
git config --global credential.helper manager-core
You need for that to install git-credential-manager-core
, downloading its latest release, like gcmcore-linux_amd64.2.0.474.41365.deb
sudo dpkg -i <path-to-package>
git-credential-manager-core configure
Linux support is no now (2021) implemented.
Although, with GCM (Git-Credential-Manager-Core) on Linux, as noted by Mekky Mayata in the comments, you need to define a git config --global credential.credentialStore
first.
See "Credential stores on Linux":
There are four options for storing credentials that Git Credential Manager Core (GCM Core) manages on Linux platforms:
- freedesktop.org Secret Service API
- GPG/
pass
compatible files- Git's built-in credential cache
- Plaintext files
By default, GCM Core comes not configured.
You can select which credential store to use by setting theGCM_CREDENTIAL_STORE
environment variable, or thecredential.credentialStore
Git configuration setting.
As noted by agent18 in the comments, using git-credential-libsecret
after installing libsecret-1-0
and libsecret-1-dev
is a good first step.
But, again, that should be now wrapped by credential-manager-core
.
In my case, in Ubuntu, the accepted solution didn't work with a message like
git: 'credential-manager' is not a git command
but store
instead of manager
worked well:
git config --global credential.helper store
Tested on Ubuntu 20.04, almost fresh install, with Git 2.25.1 and unity 7.5.
Authentication basics
Github needs an authentication key (with certain rights tied to said authentication key). A particular auth key has certain rights, (read private repos, read write public repos etc...) and "acts as a password" coupled with rights which can be revoked whenever the user wants.
Personal Access Token
git push
the repo and type the generated token(very long password) as password when asked.Storing the password in different ways
xclip
to bring it back to clipboard and paste it everytime (Screw this)git config credential.helper cache <time-limit-of-cache>
. But you still have to somehow clipboard the password after the timelimit.git config credential.helper store
(don't use --global). This is NOT ENCRYPTED. You can open the file and read it. (e.g., If someone gets access to your laptop they can pretty much read the Password using a bootable USB (assuming your whole system is not encrypted)).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
This allows to store the password/personal access token in an encrypted format. The git config
file can be found in the .git/config
file in your loca repo as shown here, if you ever need it.
P.S. There are many places that suggest the use of Gnome-keyring but that is apparently deprecated.
Storing passwords/PATs for more than one account
This becomes tricky and it appears as @VonC suggests that we need a Git-Credential-Manager core
(GCM core). This answer is enhanced based on my findings in this answer.
First install GCM core
sudo dpkg -i <path-to-package>
git-credential-manager-core configure
git config --global credential.credentialStore secretservice
as we use libsecret
Get latest git
In my case I had git 2.25 and got error error: unknown option 'show-scope'
. It appears that GCM core is using higher git
(atleast 2.26).
So install the latest and greatest git
as per here:
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
Update git remote path with username built in
GCM core needs this to identify the different accounts.:(
git remote set-url origin https://[email protected]/user1/myRepo1.git
git remote set-url origin https://[email protected]/user1/myRepo1.git
^^^^^
Your ~/.gitconfig
file will thus have the following :
[credential]
helper = /usr/bin/git-credential-manager-core
credentialStore = secretservice
[credential "https://dev.azure.com"]
useHttpPath = true
Alternatively, you can create a ~/.netrc
file in home directory and save your login credentials to it.
cat ~/.netrc
machine github.com login <login-id> password <token-password>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With