Simplified GitHub Authorization Using a Git Credential Helper
In order to avoid having to authenticate each time I want to push to github I decided to set up a get credential helper that parses an encrypted credential file. The steps were:
- Create a personal access token in github
-
Add the following in ~/.gitauth
host=github.com protocol=https username=<user> password=<token> host=gist.github.com protocol=https username=<user> password=<token> -
Generate a gpg key
gpg --gen-key- Initially I got the following error: “gpg: agent_genkey failed: No pinentry”. pinentry is just a symlink that points to one of the many pinentry binaries depending on the type you want to use. I’m running a headless server and the default pinentry expects a gui. To fix this I changed the pinentry symlink to point to pinentry-curses. I’m sure there’s a better way to do this but the few options I came across didn’t seem to work.
-
Encrypt your gitauth file
gpg -e -r email@example.com ~/.gitauth - You should know have ~/.gitauth.gpg and can remove the original ~/.gitauth
-
Set up the credential helper. Copy the following to ~/viking66/bin/git-credential-helper and make it executable:
#!/usr/bin/env sh CREDENTIAL_FILE=$1 TARGET=$(cat) HOST=$(echo $TARGET | grep -Po 'host=[^ ]+') PROTOCOL=$(echo $TARGET | grep -Po 'protocol=[^ ]+') AUTH=$(gpg -q --decrypt $CREDENTIAL_FILE | grep "$HOST" | grep "$PROTOCOL") echo "$(echo $AUTH | grep -Po 'username=[^ ]+')" echo "$(echo $AUTH | grep -Po 'password=[^ ]+')" -
Update git config to use the credential helper:
git config --global credential.helper "/home/viking66/bin/git-credential-helper ~/.gitauth.gpg" -
Add the following to your .bashrc otherwise the gpg decrypt will not prompt for password and will fail:
GPG_TTY=$(tty) export GPG_TTY - Now when you push to github, your credential helper should kick in and eliminate the need to provide your username and password.