DEV Community

Cover image for Create a Github Personal Access Token and SSH for Your Github Repository

Create a Github Personal Access Token and SSH for Your Github Repository

otumianempire profile image Otu Michael ・4 min read

Github Personal Access Token and SSH

Basic authentication is the use of username and password for authentication. For sometime Github will accept Basic authentication, the use of username and password, to access repositories on Github - to clone, push and pull. The Basic authentication will be deprecated very soon this year, 2021.

Github also allows:

  • Username and password with two-factor authentication
  • Personal access token (PAT)
  • SSH key

Create the PAT

The PAT can only be used over HTTPS Git operations

  • On Github, signup if you don't have an account or login if you already do have one
  • At the top right corner, click on your avatar and click on Settings from the drop-down
  • On the left side of your Setting Profile page, click on Developer settings
  • Click on Personal access token on the next page
  • At the right, click on Generate token
  • Give the token a name or description and check some privileges you want to give to the token
  • Click Generate token, a green button at the bottom of the page
  • Copy the token and save it somewhere safely (It will still be there when you check it)
  • If the token is forgotten or you could not save it, regenerate it.

Add token to git

vscode is my go-to text editor for my all-round development. Entering the username and token every time is a nuisance. We would add the token globally to git. For a specific application, we can add the token locally. The token would be used as the password.

  • git config --global credential.helper store
  • Now clone, push or pull with username and copied token instead of the password


  • For the sake of testing, let's create a dummy repo on Github. Choose the default settings. (Do not close the page or the browser)
  • I am on ubuntu so I will install ssh on ubuntu.
  • Update and install openssh-server: sudo apt update then sudo apt install openssh-server
  • sudo systemctl status ssh to check the ssh status then hit q to get back to the terminal
  • sudo ufw allow ssh, will open the ssh port. This enables us to connect to our Ubuntu system via SSH from any remote machine.
  • sudo systemctl disable --now ssh to disable ssh and sudo systemctl enable --now ssh to enable ssh
  • Generate ssh key, ssh-keygen -t ed25519 -C "".
  • Hit enter to use the default settings for the file name/path to save your key
  • Enter and hit enter for the passphrase and reenter the passphrase and hit enter again
  • Start the ssh-agent in the background to add add key to ssh-client: eval "$(ssh-agent -s)"
  • ssh-add ~/.ssh/id_ed25519 then enter the passphrase used initially to add key to client
  • We can now add the ssh public key to Github. We can cat the public key then copy it or open the public key in a text editor and then copy it.
  • gedit ~/.ssh/ will open the public key in gedit. Copy it.
  • On Github just as we did for the toke, go to the top right corner of the page and click on the avatar
  • Click on Settings on the drop-down
  • Click on SSH and GPG keys
  • Click New SSH key or Add SSH key.
  • add a title and then paste the public key from the text editor into the key field
  • Then click on add SSH Key and we are done adding ssh key to Github
  • The dummy repo we created earlier would have a URL, if we were to use HTTPS but for the SSH,
  • Let's clone the project from Github using SSH, git clone
  • cd dummyrepo and then echo "# dummyrepo" >>
  • git add and git commit -m "" to add and commit the
  • git push origin main to push the committed code.

Switch from HTTPS to SSH URL

Say you have the repo already using HTTPS then you have to change the URL on your local server.

  • HTTPS url:
  • SSH url:
  • check the git url, git remote -v which will display

    • origin (fetch)
    • origin (push)
  • to change from HTTPS to SSH, git remote set-url

  • check the git url verify the changes, git remote -v

    • origin (fetch)
    • origin (push)


Discussion (0)

Editor guide