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 onSettings
from the drop-down - On the left side of your
Setting Profile
page, click onDeveloper 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.
Reminder
If this was your first time actually using git then you have to set yourusername
.git config --global user.email "your@example.com"
andgit config --global user.name "Your Name"
.
git config --global credential.helper store
- Now clone, push or pull with
username
and copiedtoken
instead of thepassword
If you get an error message saying something like, Support for password authentication was removed ...
then you can do set up the token in a different way.
- look for a hidden file named,
.git-credentials
. It is a hidden file to either you checkshow hidden
files. It is located in the root of the user directory./home/user/.git-credentials
. - add the line,
https://<YOUR_USERNAME>:<YOUR_PAT>@github.com
- save and exit.
Now you can push successfully.
SSH
- For the sake of testing, let's create a dummy repository 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
thensudo apt install openssh-server
-
sudo systemctl status ssh
to check thessh
status then hitq
to get back to the terminal -
sudo ufw allow ssh
, for the firewall to allowssh
connection. This enables us to connect to our Ubuntu system via SSH from any remote machine. -
sudo systemctl disable --now ssh
to disablessh
andsudo systemctl enable --now ssh
to enablessh
- Generate
ssh
key,ssh-keygen -t ed25519 -C "your_email@example.com"
. - 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 tossh-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/id_ed25519.pub
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
orAdd SSH key
. - add a
title
and then paste thepublic key
from the text editor into thekey
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,
https://github.com/username/dummyrepo.git
if we were to use HTTPS but for the SSH,git@github.com:username/dummyrepo.git
- Let's clone the project from Github using SSH,
git clone git@github.com:username/dummyrepo.git
-
cd dummyrepo
and thenecho "# dummyrepo" >> README.md
-
git add README.md
andgit commit -m "README.md"
to add and commit theREADME.md
-
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:
https://github.com/username/dummyrepo.git
- SSH url:
git@github.com:username/dummyrepo.git
-
check the git url,
git remote -v
which will displayorigin https://github.com/username/dummyrepo.git (fetch)
origin https://github.com/username/dummyrepo.git (push)
to change from HTTPS to SSH,
git remote set-url git@github.com:username/dummyrepo.git
-
check the git url verify the changes,
git remote -v
origin git@github.com:username/dummyrepo.git (fetch)
origin git@github.com:username/dummyrepo.git (push)