Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Authenticate with GitHub using a token

I am trying to authenticate with GitHub using a personal access token. In the help files at GitHub, it states to use the cURL method to authenticate (Creating a personal access token). I have tried this, but I still cannot push to GitHub. Please note, I am trying to push from an unauthenticated server (Travis CI).

cd $HOME git config --global user.email "[email protected]" git config --global user.name "username"  curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages  cd gh-pages mkdir buildtest cd buildtest touch asdf.asdf  git add -f . git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages" git push -fq origin gh-pages 

This code causes the errors:

remote: Anonymous access to scuzzlebuzzle/ol3-1.git denied.

fatal: Authentication failed for 'https://github.com/scuzzlebuzzle/ol3-1.git/'"

like image 986
wayofthefuture Avatar asked Sep 21 '13 17:09

wayofthefuture


People also ask

How do I authenticate with tokens?

Token-based authentication for web APIs is the process of authenticating users or processes for applications in the cloud. The user's application sends a request to the authentication service, which confirms the user's identity and issues a token. The user is then able to access the application.

How do I authenticate git GitHub?

Install GitHub CLI on macOS, Windows, or Linux. In the command line, enter gh auth login , then follow the prompts. When prompted for your preferred protocol for Git operations, select HTTPS . When asked if you would like to authenticate to Git with your GitHub credentials, enter Y .


2 Answers

Your curl command is entirely wrong. You should be using the following

curl -H 'Authorization: token <MYTOKEN>' ... 

That aside, that doesn't authorize your computer to clone the repository if in fact it is private. (Taking a look, however, indicates that it is not.) What you would normally do is the following:

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages 

That will add your credentials to the remote created when cloning the repository. Unfortunately, however, you have no control over how Travis clones your repository, so you have to edit the remote like so.

# After cloning cd gh-pages git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git 

That will fix your project to use a remote with credentials built in.

Warning: Tokens have read/write access and should be treated like passwords. If you enter your token into the clone URL when cloning or adding a remote, Git writes it to your .git/config file in plain text, which is a security risk.

like image 197
Ian Stapleton Cordasco Avatar answered Sep 22 '22 15:09

Ian Stapleton Cordasco


First, you need to create a personal access token (PAT). This is described here: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Laughably, the article tells you how to create it, but gives absolutely no clue what to do with it. After about an hour of trawling documentation and Stack Overflow, I finally found the answer:

$ git clone https://github.com/user-or-organisation/myrepo.git Username: <my-username> Password: <my-personal-access-token> 

I was actually forced to enable two-factor authentication by company policy while I was working remotely and still had local changes, so in fact it was not clone I needed, but push. I read in lots of places that I needed to delete and recreate the remote, but in fact my normal push command worked exactly the same as the clone above, and the remote did not change:

$ git push https://github.com/user-or-organisation/myrepo.git Username: <my-username> Password: <my-personal-access-token> 

(@YMHuang put me on the right track with the documentation link.)

like image 45
Echelon Avatar answered Sep 22 '22 15:09

Echelon