有人看到这个错误,知道该怎么办?
我正在使用终端,我在根目录,GitHub存储库存在,我现在不知道该怎么做 .
> 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.
你可以使用Https url登录
我猜你试图用ssh url登录当你说git push如果只是要求密码认为你是通过ssh.better连接你使用http url .
我在'git push'期间遇到同样的错误 . 在客户端,我有两个起源和主人 . 我删除了一个,然后它工作正常 .
首先,我们需要检查您计算机上的现有ssh密钥 . 打开终端并运行:
ls -al ~/.ssh #or cd ~/.ssh ls
这将列出.ssh目录中的文件
最后取决于你所看到的(在我的情况下):
github_rsa github_rsa.pub known_hosts
只是尝试设置你的RSA,希望这将解决你的“git推送起源”问题
$ ssh-keygen -lf ~/.ssh/github_rsa.pub
NOTE: RSA证书是密钥配对的,因此您将拥有私有和公共证书,私有将无法访问,因为它属于github(在本例中)但公共是您可能在此错误发生时丢失的那个(至少那是我的情况,我的github帐户或repo以某种方式搞砸了,我不得不"link"公钥,以前生成的)
如果您已经创建了SSH密钥并且仍然收到错误,那是因为您需要授予用户读取和写入您正在克隆的文件夹的权限 . 为此, sudo chmod 777 <your_folder_name_here>" . 当然,这是在您生成SSH密钥后仍然出现此错误 . 希望这有助于未来的用户 .
sudo chmod 777 <your_folder_name_here>"
Edit
要添加到此,请在Windows中使用admin,如果您正在使用git bash
转到您的GitHub帐户信息中心,找到您的项目存储库,单击 Settings 选项卡 - 在 Deploy keys 下,您必须添加SSH密钥 . 打开终端并输入:
cat ~/.ssh/id_rsa.pub | pbcopy
这将从您的id_rsa.pub文件中复制密钥 . 所以,回到GitHub仪表板,粘贴它,点击 Add Key ,就是这样 .
相同的解决方案适用于Bitbucket帐户 .
一旦发生这种情况的情况是在创建存储库后遵循GitHub指令 . Git会指示您添加这样的遥控器 .
git remote add origin git@github.com:<user>/<project>.git
将<>中的内容替换为与您的帐户相关的值 .
解决方案是删除 .git 后缀 . 添加遥控器如下:
.git
git remote add origin git@github.com:<user>/<project>
我收到了这个错误 . 结果我刚刚将OSX升级到Sierra,我的旧密钥已不再注册 .
起初我以为是"Upgrading to macOS Sierra will break your SSH keys and lock you out of your own servers"
但我回避了那一个 . 结果我只需要重新注册我现有的密钥:
ssh-add -K
然后输入密码......完成!
我和@Batman有类似的问题 . 但是,因为我在/ usr / local / src / projectname下运行它,所以不使用sudo运行 .
只需添加 -E flag 以预先设置环境(您的〜/ .ssh / path) .
$ sudo -E git clone git@your_repo
来自man sudo:
-E, - preserve-env指示用户希望保留其现有环境变量的安全策略 . 如果用户没有保留环境的权限,则安全策略可能会返回错误 .
我之前使用github作为我的一个php项目 . 使用github时,我使用的是ssh而不是https . 我有_323647这样的,每次我提交并推送代码时,它会问我的密码 .
几天后,我停止了php项目的工作并忘记了我的rsa密码 . 最近,我开始研究一个java项目并转移到bitbucket . 因为,我忘记了密码并且有no way to recover it我想,我决定使用https(推荐)协议用于新项目,并在问题中得到相同的错误 .
How I solved it?
git config --global url."https://".insteadOf git://
git remote rm origin
PS:我也在调试过程中从我的机器上卸载了ssh,认为删除它会解决问题 . 是的我知道!! :)
将GitHub添加为远程时,请使用此页面的URL . 它不会导致任何此类错误并推送代码
这对我有用:
1-删除所有来源
(参见https://www.kernel.org/pub/software/scm/git/docs/git-remote.html)
remote:“管理您跟踪其分支的存储库集(”遥控器“) .
rm:“删除名为的遥控器 . 远程的所有远程跟踪分支和配置设置都将被删除 . ”
2-检查所有已被删除:
git remote -v
3-添加新的原始主人
git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
这是所有人!
tl;dr
在 ~/.ssh/config 放
~/.ssh/config
PubkeyAcceptedKeyTypes=+ssh-dss
Scenario 如果您使用的是openSSH> 7的版本,就像在MacBook Pro的触摸栏上说的那样 ssh -V OpenSSH_7.4p1, LibreSSL 2.5.0
ssh -V OpenSSH_7.4p1, LibreSSL 2.5.0
您还有一台较旧的Mac,它最初将您的密钥放在Github上,默认情况下它会使用这些DSA密钥(包括此 ssh-dss ),但您仍然可以通过将其添加回来将代码放入 ~/.ssh/config
ssh-dss
对我有用的来源是Gentoo newsletter
现在你至少可以使用GitHub,然后将你的密钥修复为RSA .
使用Https很好,运行 git config --global credential.helper wincred 创建一个Github凭证助手,为您存储凭据 . 如果这不起作用,则需要在 .git 目录中编辑 config 文件,并将原点更新为https URL .
git config --global credential.helper wincred
config
有关github文档,请参阅this link .
我最近遇到了同样的问题 . 如果您需要立即修复,这可能会有所帮助,但每次重新启动系统时都需要这样做
从终端,运行: ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa
输入您的系统密码,这应该有效 .
确保 ssh-add -l 显示了一个SSH密钥的指纹,该密钥存在于Github帐户的SSH密钥列表中 .
ssh-add -l
如果输出为空,但您知道有一个适用于您的github帐户的私有SSH密钥,请在此密钥上运行 ssh-add (在 ~/.ssh 中找到 . 默认情况下它名为 id_rsa ,因此您可能会运行 ssh-add id_rsa ) .
ssh-add
~/.ssh
id_rsa
ssh-add id_rsa
否则,请按these instructions生成SSH密钥对 .
您需要生成SSH密钥(如果您没有),并将公钥与您的Github帐户相关联 . 见Github's own documentation .
也许你的ssh-agent没有启用你可以尝试一下
http://git-scm.com/
安装它
启用ssh-agent
C:\ Program Files \ Git \ cmd
启动的ssh-agent
这发生在我身上 . 出于某种原因,我的起源搞得一团糟而没有意识到:
检查您的设置是否仍然正确
网址需要类似于ssh://git@github.com/YourDirectory/YourProject.git;如果你没有看到git@github.com,请使用
git remote set-url origin git://github.com/YourDirectory/YourProject.git
设置正确 . 或者,您可以使用github应用程序在特定存储库的设置面板中检查和设置主远程存储库URL .
我在ssh代理中加载了2个Github标识文件 . 我的个人密钥和另一个客户项目 .
我删除了导致混淆的密钥:
ssh-add -d id_rsa_github_somekey
我想我有最好的答案,你的git应用程序在root用户目录中读取你的id_rsa.pub
/home/root/.ssh/id_rsa.pub
这就是为什么git无法读取/home/your_username/.ssh/id_rsa.pub中的密钥的原因 . 所以你需要在/home/root/.ssh/中创建密钥
$ sudo su $ ssh-keygen $ cd ~/.ssh $ cat id_rsa.pub
然后在您的github帐户中复制密钥 . 它对我有用 . 你可以尝试一下 .
你在〜/ .ssh目录中创建了一个 config 文件吗?它应该有这样的内容:
Host github.com IdentityFile ~/.ssh/github_rsa
假设您创建了一个名为 github_rsa 的ssh密钥
并将其上传到GitHub ...
注意:如果〜/ .ssh /目录中有多个键(2个或更多),则必须遵循这种显式配置方式 . 如果您没有以这种方式指定密钥,则按顺序使用第一个密钥并将其用于github身份验证,因此它取决于密钥文件名 .
同样在ubuntu中,即使已经在BitBucket的设置中输入了SSH密钥,我也遇到了这个问题 . 原因是,我正在尝试以下方面:
sudo git push origin master
不知道为什么,但它通过使用解决了
git push origin master
No sudo used.
GitHub没有使用SSH密钥进行设置,因为您没有set one up on your machine,或者您的密钥与您的GitHub帐户无关 .
您还可以使用HTTPS URL而不是SSH / git URL来避免必须处理SSH密钥 . 这是GitHub's recommended method .
此外,GitHub有help page specifically for that error message,并详细解释了您可以检查的所有内容 .
Another solution :
创建SSH密钥,键入 ssh-keygen -t rsa -C "your_email@example.com" . 这将创建id_rsa和id_rsa.pub文件 .
ssh-keygen -t rsa -C "your_email@example.com"
将id_rsa添加到本地计算机上的ssh列表: ssh-add ~/.ssh/id_rsa.
ssh-add ~/.ssh/id_rsa.
生成密钥后,使用以下方法获取pubkey:
cat ~/.ssh/id_rsa.pub
你会得到类似的东西:
cat ~/.ssh/id_rsa.pub ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com
复制此密钥(值)并转到github.com并在设置(ssh和pgp密钥)下添加您的公钥 .
如果您没有访问自己的存储库,或克隆在克隆的存储库中(使用一些“git submodule ...”命令):
在存储库的主目录中:
$ ls -a
1. Open ".gitmodules", 你会发现这样的事情:
[submodule "XXX"] path = XXX url = git@github.com:YYY/XXX.git
将最后一行更改为您需要提取的存储库的 HTTPS :
[submodule "XXX"] path = XXX https://github.com/YYY/XXX.git
Save ".gitmodules" 和 run 子模块的命令,".git"将被更新 .
2. Open ".git", 转到"config"文件,你会发现这样的事情:
[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
url = https://github.com/YYY/XXX.git
因此,在这种情况下,主要问题只是网址 . 现在可以在存储库页面的顶部找到任何存储库的HTTPS .
如果您使用的是GitHub for Mac UI,请检查首选项以确保您已登录 .
我知道这个问题 . 添加ssh密钥后,也将ssh密钥添加到ssh代理(来自官方文档https://help.github.com/articles/generating-ssh-keys/)
ssh-agent -s ssh-add ~/.ssh/id_rsa
在它之后,所有工作都很好,git可以查看正确的密钥,之前没有 .
我想补充一些我的发现:
如果您使用 GitBash ,请确保SSH密钥存储在 ~/.ssh/id_rsa 中 .
GitBash
~/.ssh/id_rsa
默认 GitBash 搜索 ~/.ssh/id_rsa 作为SSH密钥的默认路径 .
甚至文件名 id_rsa 都很重要 . 如果将SSH密钥保存在另一个文件名或路径中,则会抛出 Permission Denied(publickey) 错误 .
Permission Denied(publickey)
假设您通过SSH连接GitHub,您可以运行以下命令来确认这一点 .
$git config --get remote.origin.url
如果您得到的结果格式如下:git@github.com:xxx / xxx.github.com.git,那么您应该执行以下操作 .
生成SSH密钥(或使用现有密钥) . 如果你有一个,你只需要将你的密钥添加到ssh-agent(第2步)和你的GitHub帐户(第3步) .
以下是那些没有SSH密钥的人 .
Step 1 生成公钥/私钥rsa密钥对 .
$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
系统会要求您确认保存SSH密钥的位置以及要使用的密码短语 .
Step 2 将密钥添加到ssh-agent
$eval "$(ssh-agent -s)"
$ssh-add ~/.ssh/id_rsa
Step 3 将SSH密钥添加到您的帐户
$sudo apt-get install xclip
$xclip -sel clip < ~/.ssh/id_rsa.pub
然后将复制的密钥添加到GitHub
转到 Settings - > SSH keys (个人设置侧栏) - > Add SSH key - >填写表格(键在你的剪贴板上,只需使用ctrl v) - > Add key
完成上述步骤后,您应该解决权限问题 .
参考链接:Generating SSH keys .
对我来说,我试过这个 -
eval "$(ssh-agent -s)"
然后我跑了
ssh-add ~/.ssh/path-to-the-keyfile
并且为了生成密钥,您可以运行
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将生成一对密钥(公共和私有) .
您可以将此密钥存储到github以获取更多信息Adding a new SSH key to your GitHub account
我希望它会帮助别人:)
30 回答
你可以使用Https url登录
我猜你试图用ssh url登录当你说git push如果只是要求密码认为你是通过ssh.better连接你使用http url .
我在'git push'期间遇到同样的错误 . 在客户端,我有两个起源和主人 . 我删除了一个,然后它工作正常 .
首先,我们需要检查您计算机上的现有ssh密钥 . 打开终端并运行:
这将列出.ssh目录中的文件
最后取决于你所看到的(在我的情况下):
只是尝试设置你的RSA,希望这将解决你的“git推送起源”问题
$ ssh-keygen -lf ~/.ssh/github_rsa.pub
NOTE: RSA证书是密钥配对的,因此您将拥有私有和公共证书,私有将无法访问,因为它属于github(在本例中)但公共是您可能在此错误发生时丢失的那个(至少那是我的情况,我的github帐户或repo以某种方式搞砸了,我不得不"link"公钥,以前生成的)
如果您已经创建了SSH密钥并且仍然收到错误,那是因为您需要授予用户读取和写入您正在克隆的文件夹的权限 . 为此,
sudo chmod 777 <your_folder_name_here>"
. 当然,这是在您生成SSH密钥后仍然出现此错误 . 希望这有助于未来的用户 .Edit
要添加到此,请在Windows中使用admin,如果您正在使用git bash
转到您的GitHub帐户信息中心,找到您的项目存储库,单击 Settings 选项卡 - 在 Deploy keys 下,您必须添加SSH密钥 . 打开终端并输入:
这将从您的id_rsa.pub文件中复制密钥 . 所以,回到GitHub仪表板,粘贴它,点击 Add Key ,就是这样 .
相同的解决方案适用于Bitbucket帐户 .
一旦发生这种情况的情况是在创建存储库后遵循GitHub指令 . Git会指示您添加这样的遥控器 .
git remote add origin git@github.com:<user>/<project>.git
将<>中的内容替换为与您的帐户相关的值 .
解决方案是删除
.git
后缀 . 添加遥控器如下:git remote add origin git@github.com:<user>/<project>
我收到了这个错误 . 结果我刚刚将OSX升级到Sierra,我的旧密钥已不再注册 .
起初我以为是"Upgrading to macOS Sierra will break your SSH keys and lock you out of your own servers"
但我回避了那一个 . 结果我只需要重新注册我现有的密钥:
ssh-add -K
然后输入密码......完成!
我和@Batman有类似的问题 . 但是,因为我在/ usr / local / src / projectname下运行它,所以不使用sudo运行 .
只需添加 -E flag 以预先设置环境(您的〜/ .ssh / path) .
$ sudo -E git clone git@your_repo
来自man sudo:
我之前使用github作为我的一个php项目 . 使用github时,我使用的是ssh而不是https . 我有_323647这样的,每次我提交并推送代码时,它会问我的密码 .
几天后,我停止了php项目的工作并忘记了我的rsa密码 . 最近,我开始研究一个java项目并转移到bitbucket . 因为,我忘记了密码并且有no way to recover it我想,我决定使用https(推荐)协议用于新项目,并在问题中得到相同的错误 .
How I solved it?
PS:我也在调试过程中从我的机器上卸载了ssh,认为删除它会解决问题 . 是的我知道!! :)
将GitHub添加为远程时,请使用此页面的URL . 它不会导致任何此类错误并推送代码
这对我有用:
1-删除所有来源
(参见https://www.kernel.org/pub/software/scm/git/docs/git-remote.html)
remote:“管理您跟踪其分支的存储库集(”遥控器“) .
rm:“删除名为的遥控器 . 远程的所有远程跟踪分支和配置设置都将被删除 . ”
2-检查所有已被删除:
3-添加新的原始主人
这是所有人!
tl;dr
在
~/.ssh/config
放Scenario 如果您使用的是openSSH> 7的版本,就像在MacBook Pro的触摸栏上说的那样
ssh -V OpenSSH_7.4p1, LibreSSL 2.5.0
您还有一台较旧的Mac,它最初将您的密钥放在Github上,默认情况下它会使用这些DSA密钥(包括此
ssh-dss
),但您仍然可以通过将其添加回来将代码放入~/.ssh/config
对我有用的来源是Gentoo newsletter
现在你至少可以使用GitHub,然后将你的密钥修复为RSA .
使用Https很好,运行
git config --global credential.helper wincred
创建一个Github凭证助手,为您存储凭据 . 如果这不起作用,则需要在.git
目录中编辑config
文件,并将原点更新为https URL .有关github文档,请参阅this link .
我最近遇到了同样的问题 . 如果您需要立即修复,这可能会有所帮助,但每次重新启动系统时都需要这样做
从终端,运行:
ssh-add ~/.ssh/id_rsa
输入您的系统密码,这应该有效 .
确保
ssh-add -l
显示了一个SSH密钥的指纹,该密钥存在于Github帐户的SSH密钥列表中 .如果输出为空,但您知道有一个适用于您的github帐户的私有SSH密钥,请在此密钥上运行
ssh-add
(在~/.ssh
中找到 . 默认情况下它名为id_rsa
,因此您可能会运行ssh-add id_rsa
) .否则,请按these instructions生成SSH密钥对 .
您需要生成SSH密钥(如果您没有),并将公钥与您的Github帐户相关联 . 见Github's own documentation .
也许你的ssh-agent没有启用你可以尝试一下
http://git-scm.com/
安装它
启用ssh-agent
C:\ Program Files \ Git \ cmd
启动的ssh-agent
这发生在我身上 . 出于某种原因,我的起源搞得一团糟而没有意识到:
检查您的设置是否仍然正确
网址需要类似于ssh://git@github.com/YourDirectory/YourProject.git;如果你没有看到git@github.com,请使用
设置正确 . 或者,您可以使用github应用程序在特定存储库的设置面板中检查和设置主远程存储库URL .
我在ssh代理中加载了2个Github标识文件 . 我的个人密钥和另一个客户项目 .
我删除了导致混淆的密钥:
ssh-add -d id_rsa_github_somekey
我想我有最好的答案,你的git应用程序在root用户目录中读取你的id_rsa.pub
这就是为什么git无法读取/home/your_username/.ssh/id_rsa.pub中的密钥的原因 . 所以你需要在/home/root/.ssh/中创建密钥
然后在您的github帐户中复制密钥 . 它对我有用 . 你可以尝试一下 .
你在〜/ .ssh目录中创建了一个 config 文件吗?它应该有这样的内容:
假设您创建了一个名为 github_rsa 的ssh密钥
并将其上传到GitHub ...
注意:如果〜/ .ssh /目录中有多个键(2个或更多),则必须遵循这种显式配置方式 . 如果您没有以这种方式指定密钥,则按顺序使用第一个密钥并将其用于github身份验证,因此它取决于密钥文件名 .
同样在ubuntu中,即使已经在BitBucket的设置中输入了SSH密钥,我也遇到了这个问题 . 原因是,我正在尝试以下方面:
不知道为什么,但它通过使用解决了
No sudo used.
GitHub没有使用SSH密钥进行设置,因为您没有set one up on your machine,或者您的密钥与您的GitHub帐户无关 .
您还可以使用HTTPS URL而不是SSH / git URL来避免必须处理SSH密钥 . 这是GitHub's recommended method .
此外,GitHub有help page specifically for that error message,并详细解释了您可以检查的所有内容 .
Another solution :
创建SSH密钥,键入
ssh-keygen -t rsa -C "your_email@example.com"
. 这将创建id_rsa和id_rsa.pub文件 .将id_rsa添加到本地计算机上的ssh列表:
ssh-add ~/.ssh/id_rsa.
生成密钥后,使用以下方法获取pubkey:
你会得到类似的东西:
复制此密钥(值)并转到github.com并在设置(ssh和pgp密钥)下添加您的公钥 .
如果您没有访问自己的存储库,或克隆在克隆的存储库中(使用一些“git submodule ...”命令):
在存储库的主目录中:
1. Open ".gitmodules", 你会发现这样的事情:
将最后一行更改为您需要提取的存储库的 HTTPS :
Save ".gitmodules" 和 run 子模块的命令,".git"将被更新 .
2. Open ".git", 转到"config"文件,你会发现这样的事情:
将最后一行更改为您需要提取的存储库的 HTTPS :
因此,在这种情况下,主要问题只是网址 . 现在可以在存储库页面的顶部找到任何存储库的HTTPS .
如果您使用的是GitHub for Mac UI,请检查首选项以确保您已登录 .
我知道这个问题 . 添加ssh密钥后,也将ssh密钥添加到ssh代理(来自官方文档https://help.github.com/articles/generating-ssh-keys/)
在它之后,所有工作都很好,git可以查看正确的密钥,之前没有 .
我想补充一些我的发现:
如果您使用
GitBash
,请确保SSH密钥存储在~/.ssh/id_rsa
中 .默认
GitBash
搜索~/.ssh/id_rsa
作为SSH密钥的默认路径 .甚至文件名
id_rsa
都很重要 . 如果将SSH密钥保存在另一个文件名或路径中,则会抛出Permission Denied(publickey)
错误 .假设您通过SSH连接GitHub,您可以运行以下命令来确认这一点 .
如果您得到的结果格式如下:git@github.com:xxx / xxx.github.com.git,那么您应该执行以下操作 .
生成SSH密钥(或使用现有密钥) . 如果你有一个,你只需要将你的密钥添加到ssh-agent(第2步)和你的GitHub帐户(第3步) .
以下是那些没有SSH密钥的人 .
Step 1 生成公钥/私钥rsa密钥对 .
系统会要求您确认保存SSH密钥的位置以及要使用的密码短语 .
Step 2 将密钥添加到ssh-agent
$eval "$(ssh-agent -s)"
$ssh-add ~/.ssh/id_rsa
Step 3 将SSH密钥添加到您的帐户
$sudo apt-get install xclip
$xclip -sel clip < ~/.ssh/id_rsa.pub
然后将复制的密钥添加到GitHub
转到 Settings - > SSH keys (个人设置侧栏) - > Add SSH key - >填写表格(键在你的剪贴板上,只需使用ctrl v) - > Add key
完成上述步骤后,您应该解决权限问题 .
参考链接:Generating SSH keys .
对我来说,我试过这个 -
然后我跑了
并且为了生成密钥,您可以运行
这将生成一对密钥(公共和私有) .
您可以将此密钥存储到github以获取更多信息Adding a new SSH key to your GitHub account
我希望它会帮助别人:)