可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Anybody seen this error and know what to do?
I\'m using the terminal, I\'m in the root, the GitHub repository exists and I don\'t know what to do now.
> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
回答1:
GitHub isn\'t able to authenticate you. So, either you aren\'t setup with an SSH key, because you haven\'t set one up on your machine, or your key isn\'t associated with your GitHub account.
You can also use the HTTPS URL instead of the SSH/git URL to avoid having to deal with SSH keys. This is GitHub\'s recommended method.
Further, GitHub has a help page specifically for that error message, and explains in more detail everything you could check.
回答2:
Did you create a config file in your ~/.ssh directory? It should have contents like these:
Host github.com
IdentityFile ~/.ssh/github_rsa
Assuming that you created an ssh key named github_rsa
and uploaded it to GitHub...
NOTE: You must follow this way of explicit configuration if you have more than 1 key (2 and more) in your ~/.ssh/ directory. If you don\'t specify key this way, then first key in order is taken and used for github authentication, so it depends on the key file name then.
回答3:
You need to generate an SSH key (if you don\'t have one) and associate the public key with your Github account. See Github\'s own documentation.
回答4:
This happened to me. For some reason my origin got messed up without my realizing it:
Check if your settings are still correct
git remote -v
the url needs to be something like ssh://git@github.com/YourDirectory/YourProject.git;
if you don\'t see git@github.com, use
git remote set-url origin git://github.com/YourDirectory/YourProject.git
to set it right. Or you could use the github app to check and set the Primary Remote Repository url in the settings panel of your particular repository.
回答5:
I know this problem. After add ssh key, add you ssh key to ssh agent too (from oficial docs https://help.github.com/articles/generating-ssh-keys/)
ssh-agent -s
ssh-add ~/.ssh/id_rsa
After it, all work fine, git can view proper key, before coudn\'t.
回答6:
First, we need to check for existing ssh keys on your computer. Open up Terminal and run:
ls -al ~/.ssh
#or
cd ~/.ssh
ls
and that will lists the files in your .ssh directory
And finally depending on what you see (in my case was):
github_rsa github_rsa.pub known_hosts
Just try setting up your RSA and hopefully that will solve your \"git push origin\" issues
$ ssh-keygen -lf ~/.ssh/github_rsa.pub
NOTE: RSA certificates are keys-paired so you will have a private and a public certificate, private will not be accessible for you since it belongs to github (in this case) but the public is the one you might be missing when this error happens (at least that was my case, my github account or repo got messed up somehow and i had to \"link\" the public key, previously generated)
回答7:
Assuming you are connecting GitHub over SSH, you can run below command to confirm this.
$git config --get remote.origin.url
If you get a result has following format git@github.com:xxx/xxx.github.com.git, then you should do the following.
Generate a SSH key(or use existing one). if you had one, you just need to add your key to the ssh-agent (step 2)and to your GitHub account(step 3).
below are for those who don\'t have SSH key.
Step 1 Generating public/private rsa key pair.
$ssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"
You\'ll be asked to confirm where to save the SSH key and what passphrase you want to use.
Step 2 Add your key to the ssh-agent
Ensure ssh-agent is enabled
$eval \"$(ssh-agent -s)\"
Add your SSH key to the ssh-agent:
$ssh-add ~/.ssh/id_rsa
Step 3 Add your SSH key to your account
$sudo apt-get install xclip
$xclip -sel clip < ~/.ssh/id_rsa.pub
Then add the copied key to GitHub
Go to Settings->SSH keys(Personal settings side bar)->Add SSH key->fill out form(key is on your clipboard, just use ctrl+v)->Add key
After going through above steps, you should solve the permission problem.
Reference Link:
Generating SSH keys.
回答8:
I was getting this error. Turns out I had just upgraded OSX to Sierra and my old key was no longer registered.
At first I thought it was \"Upgrading to macOS Sierra will break your SSH keys and lock you out of your own servers\"
But I had sidestepped that one. Turns out I just had to re-register my existing key:
ssh-add -K
And type the passphrase... done!
回答9:
Make sure ssh-add -l
shows a fingerprint of an SSH key that\'s present in the list of SSH keys in your Github account.
If the output is empty, but you know you have a private SSH key that works with your github account, run ssh-add
on this key (found in ~/.ssh
. It\'s named id_rsa
by default, so you\'ll likely run ssh-add id_rsa
).
Else, follow these instructions to generate an SSH key pair .
回答10:
In case you are not accessing your own repository, or cloning inside a cloned repository (using some \"git submodule... \" commands):
In the home directory of your repository:
$ ls -a
1. Open \".gitmodules\", and you will find something like this:
[submodule \"XXX\"]
path = XXX
url = git@github.com:YYY/XXX.git
Change the last line to be the HTTPS of the repository you need to pull:
[submodule \"XXX\"]
path = XXX
https://github.com/YYY/XXX.git
Save \".gitmodules\", and run the command for submodules, and \".git\" will be updated.
2. Open \".git\", go to \"config\" file, and you will find something like this:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote \"origin\"]
url = https://github.com/YYY/XXX.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch \"master\"]
remote = origin
merge = refs/heads/master
[submodule \"XXX\"]
url = git@github.com:YYY/XXX.git
Change the last line to be the HTTPS of the repository you need to pull:
url = https://github.com/YYY/XXX.git
So, in this case, the main problem is simply with the url. HTTPS of any repository can be found now on top of the repository page.
回答11:
I was using github earlier for one of my php project. While using github, I was using ssh instead of https. I had my machine set up like that and every time I used to commit and push the code, it would ask me my rsa key password.
After some days, I stopped working on the php project and forgot my rsa password. Recently, I started working on a java project and moved to bitbucket. Since, I had forgotten the password and there is no way to recover it I guess, I decided to use the https(recommended) protocol for the new project and got the same error asked in the question.
How I solved it?
Ran this command to tell my git to use https instead of ssh:
git config --global url.\"https://\".insteadOf git://
Remove any remote if any
git remote rm origin
Redo everything from git init to git push and it works!
PS: I also un-installed ssh from my machine during the debug process thinking that, removing it will fix the problem. Yes I know!! :)
回答12:
this worked for me:
1- remove all origins
git remote rm origin
(cf. https://www.kernel.org/pub/software/scm/git/docs/git-remote.html)
*remote : \"Manage the set of repositories (\"remotes\") whose branches you track.
*rm : \"Remove the remote named . All remote-tracking branches and configuration settings for the remote are removed.\"
2- check all has been removed :
git remote -v
3- add new origin master
git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
that\'s all folks!
回答13:
Another solution :
create the SSH keys, type ssh-keygen -t rsa -C \"your_email@example.com\"
. This will create both id_rsa and id_rsa.pub files.
Add the id_rsa to ssh list on local computer: ssh-add ~/.ssh/id_rsa.
After generating the keys get the pubkey using :
cat ~/.ssh/id_rsa.pub
you will get something like :
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com
copy this key (value) and go to github.com and under the setting (ssh and pgp key) add your public key.
回答14:
I think i have the best answer for you, your git apps read your id_rsa.pub in root user directory
/home/root/.ssh/id_rsa.pub
That\'s why your key in /home/your_username/.ssh/id_rsa.pub can\'t be read by git. So you need to create the key in /home/root/.ssh/
$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub
Then copy the key in your github account.
It\'s worked for me. You can try it.
回答15:
I had the same issue recently. This might help if you need a fix immediately, but this needs to be done every time you re-start your system
From terminal, run : ssh-add ~/.ssh/id_rsa
Enter your system password and that should work.
回答16:
I would like to add some of my findings:
If you are using GitBash
, then make sure the SSH key is stored in ~/.ssh/id_rsa
.
By Default GitBash
searches for ~/.ssh/id_rsa
as default path for SSH key.
Even the file name id_rsa
matters. If you save your SSH key in another filename or path, it will throw the Permission Denied(publickey)
error.
回答17:
If you have already created an SSH key and are still getting the error it is because you need to give the user permissions to read and write to the folder you are cloning into. To do this, sudo chmod 777 <your_folder_name_here>\"
.
Of course, this is after you have generated an SSH key and you are still getting this error. Hope this helps future users.
Edit
To add on to this use admin in Windows if you\'re using the git bash
回答18:
If you are using the GitHub for Mac UI, check preferences to make sure you\'re logged in.
回答19:
I was getting same error during \'git push\'. In client side I had two origin and master. I removed one, then it worked fine.
回答20:
you can use Https url to login
i guess you are trying to login with ssh url
when you say git push if it as asking only password consider you are connecting through ssh.better you use http url.
回答21:
Also in ubuntu, even though there was already SSH key entered in settings in BitBucket, I got this problem. The reason was, I was trying the following:
sudo git push origin master
Not sure why, but it got solved by using
git push origin master
No sudo used.
回答22:
Once scenario where this will happen is when you follow GitHub instructions after you create your repository. Git will instruct you to add your remote with something like this.
git remote add origin git@github.com:<user>/<project>.git
Replace what\'s in <> with values related to your account.
The solution is to remove the .git
suffix. Add the remote as follows:
git remote add origin git@github.com:<user>/<project>
回答23:
tl;dr
in ~/.ssh/config
put
PubkeyAcceptedKeyTypes=+ssh-dss
Scenario
If you are using a version of openSSH > 7, like say on a touchbar MacBook Pro it is ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0
You also had an older Mac which originally had your key you put onto Github, it\'s possible that is using an id_dsa key. OpenSSH v7 doesn\'t put in by default the use of these DSA keys (which include this ssh-dss
) , but you can still add it back by putting the following code into your ~/.ssh/config
PubkeyAcceptedKeyTypes=+ssh-dss
Source that worked for me is this Gentoo newsletter
Now you can at least use GitHub and then fix your keys to RSA.
回答24:
Maybe your ssh-agent is not enable
You can try it
- Download git
http://git-scm.com/
Install it
Enable ssh-agent
C:\\Program Files\\Git\\cmd
start-ssh-agent
回答25:
For me I tried this -
eval \"$(ssh-agent -s)\"
then I run
ssh-add ~/.ssh/path-to-the-keyfile
and for generating the key you can run
ssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"
this will generate the pair of keys (Public and private).
you can store this key to github for more read this Adding a new SSH key to your GitHub account
I hope it will help others :)
回答26:
Go to your GitHub account dashboard, find your project repository, click Settings tab - under Deploy keys you\'ll have to add your SSH key. Open Terminal and type:
cat ~/.ssh/id_rsa.pub | pbcopy
This will copy the key from your id_rsa.pub file. So just go back to GitHub dashboard, paste it, click Add Key and that\'s it.
The same solution applies to Bitbucket accounts.
回答27:
I was having a similar problem to @Batman. However, because I was running this under /usr/local/src/projectname, running without sudo was not an option.
Just add the -E flag to preseve the environment (your ~/.ssh/ path).
$ sudo -E git clone git@your_repo
From man sudo:
-E, --preserve-env
Indicates to the security policy that the user wishes to pre‐
serve their existing environment variables. The security
policy may return an error if the user does not have permis‐
sion to preserve the environment.
回答28:
I had 2 Github identity files loaded in the ssh agent. My personal key and another for a client project.
I removed the key that was causing confusion:
ssh-add -d id_rsa_github_somekey
回答29:
Use the URL for this page when adding GitHub as a remote.
it wont cause any such error and push the code
回答30:
Using Https is fine, run git config --global credential.helper wincred
to create a Github credential helper that stores your credentials for you. If this doesn\'t work, then you need to edit your config
file in your .git
directory and update the origin to the https url.
See this link for the github docs.