How to fix - git@github.com permission denied (publickey). fatal could not read from remote repository and Support for password authentication was removed. Please use a personal access token instead

 来源:https://jhooq.com/github-permission-denied-publickey/

git@github.com: Permission denied (public key).fatal: Could not read from remote repository. - It means GitHub is rejecting your connection because -

  1. It is your private repo
  2. GitHub does not trust your computer because it does not have the public key of your computer.

And when you try to clone the repo you get the following error message -

git@github.com: Permission denied (public key).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
BASH

Not only github but you can face this issue on the platform like GitLabDigitalOcean, here I have composed the list of possible solutions -

  1. GitHub - How to fix git@github.com: Permission denied (public key)?
  2. GitLab - How to fix gitlab.com: permission denied (publickey) fatal: Could not read from remote repository
  3. BitBucket - Permission denied (public key), can't clone/clone to bitbucket
  4. Personal Access Token - How to fix(GitHub)-Support for password authentication was removed. Please use a personal access token instead




One of the easiest ways for you to generate a key pair is by running ssh-keygen utility.

Open the command prompt and type in the following

ssh-keygen
BASH

(Note - If you do not have ssh-keygen installed on the window then Click here.)

To keep the ssh-keygen simple, do not enter any key name or passphrase.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/rahulwagh/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/rahulwagh/.ssh/id_rsa.
Your public key has been saved in /Users/rahulwagh/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Okq3w+SesCGLQVToSBQru8RdUZtT2EIIrzH5MQ67DWA rahulwagh@local
The key's randomart image is:
+---[RSA 3072]----+
|.ooo..+oo.       |
| oo o..o+.       |
|=E = = +.        |
|*oo X o .        |
|.+ = o  S        |
|o.  + ..         |
|o ..+=+          |
| o + *++         |
|. . o.+.         |
+----[SHA256]-----+
BASH


The file will be generated at - /Users/rahulwagh/.ssh/

Name of the file - id_rsa.pub

(To generate SSH keys on Windows machine click here)



  1. Goto your GitHub Account -> Settings

Git hub account settings

  1. Then look for SSH and GPG keys under **Account Settings -> SSH and GPG keys **

github ssh and gpg keys

  1. After that click on New SSH Key. Assign some meaningful name to your key

GitHub new ssh keys

  1. To get the key goto to your command prompt and switch directory path

Windows - C:\Users\rahulwagh.ssh\id_rsa.pub

Linux - /Users/rahulwagh/.ssh/id_rsa.pub

Run the following command

cat id_rsa.pub
BASH

id_rsa_key content

  1. Copy the content of the key

  2. Paste the key inside your GitHub account

Git hub account settings

Now you can clone your GitHub repo and it will not complain about git@github.com permission denied (publickey). fatal could not read from remote repository



  1. You do not need to supply you GitHub Username and password
  2. More secured


  1. The process of generating SSH keys is little troublesome.
  2. If you switch your laptop/desktop then you need re-generate the SSH keys again and perform the same steps onto your new laptop/desktop.

This is one more approach in which you do not need to worry about SSH key generation.

You need following -

  1. GitHub repo URL with HTTPS (Ex - https://github.com/rahulwagh/example.git)
  2. Your GitHub Username
  3. Your GitHub Password

Run the following command to set git remote

git clone origin https://github.com/rahulwagh/example.git 
BASH

After that it will ask for your username and password, supply your username and password.

Once you are authenticated then you can perform your Git operations.


  1. You do not need to generate SSH keys
  2. You do not need to copy your SSH keys to GitHub accounts
  3. This approach can be used from any Laptop, Desktop. You only need to provide your GitHub credentials with this approach.


  1. The only drawback which I can see is you need to input your GitHub credentials everytime.



When you are working with multiple github repositories then there is high probability that you might have incorrect public key mentioned inside your ~/.ssh directory.

For example I have generated the public key for my GitLab project by the name ~/.ssh/id_rsa.gitlab.pub

But when I checked my ~/.ssh/config file I noticed the incorrect name of public key for the gitlab.com

Here is the content of my ~/.ssh/config file where the public key name is ~/.ssh/id_rsa instead of ~/.ssh/id_rsa.gitlab.pub

Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_rsa 


To fix this issue you should correct the public key name -

Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_rsa.gitlab.pub
BASH



There could be multiple reasons behind the issue -


SSH keys could be one of the most probable reasons which are causing the issue while working with your BitBucket repository.

You might see the following errors -

Permission denied (publickey).
BASH

or

abort: Permission denied: 
BASH

or (In case you are working with mercury then you might see this error message)

remote: Permission denied (publickey).
abort: no suitable response from remote hg! 

Before we start debugging the issue, let's first debug the issue to know the exact reason behind this error.

Run the following command from your terminal (put your correct repository name) -

ssh -T your_bitbucket_repo@domain.com
BASH

The above command should return you with Username and in case you did not see your username then you need to Create SSH keys and add to your BitBucket account.

Step 1 - Create your Public SSH Keys

Step 2 - Goto Your Account -> Manage Account -> SSH Keys

Step 3 - Click on Add Key

Step 4 - Paste your key which you have generated in Step 1.

Step 5 - Finally click on Add Key

It should work after adding the SSH keys to your BitBucket account.

(Note - Here are some official links from bitbucket if you are interested more - click here)

There could also be a possibility that you do not have permission to access the BitBucket repository. Check with your bitbucket administrator with regards to your permission.

If it is the case of permission then your bitbucket administrator could grant the permission.

If you are working on a windows machine then you need to install the OpenSSH.

Goto: Apps > Apps and Features > Manage Optional Features

Verify the list of the apps, if it already installed. If not then go at the top of the page then select Add a Feature afterwords -

  • OpenSSH Client : Locate OpenSSH Client, then click Install.
  • OpenSSH Server : Locate OpenSSH Server, then click Install.

If you like using Powershell then first make sure OpenSSH features are available to install -

Copy and run the following command

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

# This should return the following output:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
BASH

After that install server and client features using the following command -

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Both of these should return the following output:
`
Path          :
Online        : True
RestartNeeded : False
BASH


  1. Goto settings panel

windows setting panel

  1. Click on Optional Features and then look for OpenSSH client, if you can find the OpenSSH client which means you have installed it correctly.

windows setting panel

  1. Next we need to run the ssh-keygen and for that goto window's command prompt and open it in administrator mode.

windows command prompt administrator mode

  1. In the command prompt type the following command
ssh-keygen
BASH
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\rahulwagh/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in C:\Users\rahulwagh/.ssh/id_rsa.
Your public key has been saved in C:\Users\rahulwagh/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Okq3w+SesCGLQVToSBQru8RdUZtT2EIIrzH5MQ67DWA rahulwagh@local
The key's randomart image is:
+---[RSA 3072]----+
|.ooo..+oo.       |
| oo o..o+.       |
|=E = = +.        |
|*oo X o .        |
|.+ = o  S        |
|o.  + ..         |
|o ..+=+          |
| o + *++         |
|. . o.+.         |
+----[SHA256]-----+
 
BASH

The file will be generated at - C:\Users\rahulwagh.ssh\id_rsa

Name of the file - id_rsa


GitHub has recently announced their migration to use token-based authentication which means you can no longer use your username and password for GtiHub authentication. You need to create personal access token to continue use of your GitHub Repository.

Here is my private GitHub repository which I was trying to clone and prompted with the error message -

Support for password authentication was removed. Please use a personal access token instead

This issue is very much dependent on the way you clone your repository.

1. git@github.com:rahulwagh/jhooq.git - If you are using SSH way of cloning the repository then you will not face issue related to personal access token. Because when you use SSH way of clonning then you should always create SSH Keys and copy public SSH key to GitHub SSH and GPG keys

2. https://github.com/rahulwagh/jhooq.git - If you are using HTTPS way of cloning the Git Repository then you will be prompted with usernamepassword and after entering the username and password you will be thrown with error Support for password authentication was removed. Please use a personal access token instead


  1. Login to your GitHub account from the web browser.
  2. Goto -> Profile Pic -> Setting

personal access token settings

  1. After that you should look on the left navigation panel and there should be an option of Developer Settings

personal access token settings developer settings

  1. Aftr that it will redirect you to the new page where you will find an option Personal Access Token in the left navigation. You should click on it -

personal access token click on the option

  1. Then next on the right side of the screen you have an option to Generate New Token -

personal access token Generate new Token

  1. Enter the token name along with the scopes -

personal access token enter token name and scopes

  1. Finally Generate Token
  2. Now Copy the generated Token

personal access token copy generated token

  1. Go back to terminal and re-issue the Git Clone command and instead of password input the access token

supply personal access token instead of GitHub password

It should fix your issue of - "Support for password authentication was removed. Please use a personal access token instead"

  1. Strong - The Personal Access Token are randomly generated string which contains all possible combination of literal, number, upper case, lower case and special symbol. So it is really hard for brute force attack.
  2. Better Scoping - With personal access token you can control the access level at granular level.
  3. Multiple Personal Access Token - You can more then one personal access token so that you do not have to share password with anyone else.
  4. Revocable - You can easily revoke the access to repository by deleting the personal access token.

评论

此博客中的热门博文

又一款美国免费主机,无限流量动态X10hosting

Nginx【Docker系列】一个反向代理神器——Nginx Proxy Manager

这个网盘不限速,而且支持临时分享