有人看到此错误并知道该怎么做吗?
我正在使用终端,我在根目录下,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.
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,并更详细地解释了您可以检查的所有内容。
我知道这个问题。添加 ssh 密钥后,也将您的 ssh 密钥添加到 ssh 代理(来自官方 docs)
ssh-agent -s
ssh-add ~/.ssh/id_rsa
一切正常后,git可以查看正确的密钥,之前不能。
ssh-agent -s
ssh-add ~/.ssh/github_rsa
您是否在 ~/.ssh 目录中创建了配置文件?它应该有如下内容:
Host github.com
IdentityFile ~/.ssh/github_rsa
假设您创建了一个名为 github_rsa 的 ssh 密钥
并将其上传到 GitHub...
注意:如果您的 ~/.ssh/ 目录中有超过 1 个密钥(2 个或更多),则必须遵循这种显式配置方式。如果你不这样指定密钥,那么按顺序取第一个密钥并用于 github 身份验证,因此它取决于密钥文件名。
ssh -T git@github.com
正确回答,而 git push -u origin master
给出了与问题中相同的错误。为什么我可以正确连接到它但无法推送或从中获取?
您需要生成一个 SSH 密钥(如果您没有)并将公钥与您的 Github 帐户相关联。请参阅Github's own documentation。
这发生在我身上。由于某种原因,我的起源在我没有意识到的情况下搞砸了:
检查您的设置是否仍然正确
git remote -v
url 需要类似于 ssh://git@github.com/YourDirectory/YourProject.git;如果您没有看到 git@github.com,请使用
git remote set-url origin git://github.com/YourDirectory/YourProject.git
正确设置。或者您可以使用 github 应用程序在特定存储库的设置面板中检查并设置主远程存储库 url。
如果您将 ssh 访问更改为对远程存储库的 https 访问,则问题已解决:
git remote set-url origin https_link_to_repository
git push -u origin master
假设您通过 SSH 连接 GitHub,您可以运行以下命令来确认这一点。
$git config --get remote.origin.url
如果您得到的结果具有以下格式 git@github.com:xxx/xxx.github.com.git,那么您应该执行以下操作。
生成一个 SSH 密钥(或使用现有的)。如果您有,您只需将您的密钥添加到 ssh-agent(步骤 2)和您的 GitHub 帐户(步骤 3)。
以下适用于那些没有 SSH 密钥的人。
步骤 1 生成公钥/私钥 rsa 密钥对。
$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
系统将要求您确认 SSH 密钥的保存位置以及要使用的密码。
步骤 2 将您的密钥添加到 ssh-agent
确保 ssh-agent 已启用 $eval "$(ssh-agent -s)"
将 SSH 密钥添加到 ssh-agent:$ssh-add ~/.ssh/id_rsa
步骤 3 将您的 SSH 密钥添加到您的帐户
$sudo apt-get install xclip
$xclip -sel clip < ~/.ssh/id_rsa.pub
然后将复制的密钥添加到 GitHub
转到设置->SSH 密钥(个人设置侧栏)->添加 SSH 密钥->填写表格(密钥在剪贴板上,只需使用 ctrl+v)->添加密钥
完成上述步骤后,您应该解决权限问题。
参考链接:Generating SSH keys。
cat ~/.ssh/id_rsa.pub
另一个解决方案:
创建 SSH 密钥,键入 ssh-keygen -t rsa -C "your_email@example.com"
。这将创建 id_rsa 和 id_rsa.pub 文件。
将 id_rsa 添加到本地计算机上的 ssh 列表: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 密钥)下添加您的公钥。
首先,我们需要检查您计算机上现有的 ssh 密钥。打开终端并运行:
ls -al ~/.ssh
#or
cd ~/.ssh
ls
这将列出您的 .ssh 目录中的文件
最后取决于您所看到的(在我的情况下是):
github_rsa github_rsa.pub known_hosts
只需尝试设置您的 RSA,希望这将解决您的“git push origin”问题
$ ssh-keygen -lf ~/.ssh/github_rsa.pub
注意:RSA 证书是密钥配对的,因此您将拥有一个私有证书和一个公共证书,您将无法访问私有证书,因为它属于 github(在这种情况下),但是当发生此错误时,您可能会丢失公共证书(至少这是我的情况,我的 github 帐户或 repo 不知何故搞砸了,我不得不“链接”以前生成的公钥)
SHA
输出复制到 github?
这对我有用:
1-删除所有来源
git remote rm origin
(参见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
就是这样!
我收到了这个错误。原来我刚刚将 OSX 升级到 Sierra,我的旧密钥不再注册。
一开始我以为是"Upgrading to macOS Sierra will break your SSH keys and lock you out of your own servers"
但我回避了那个。原来我只需要重新注册我现有的密钥:
ssh-add -K
然后输入密码……完成!
我想我有最好的答案给你,你的 git 应用程序在根用户目录中读取你的 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 帐户中。它对我有用。你可以试试。
如果您没有访问自己的存储库,或者在克隆的存储库中进行克隆(使用一些“git submodule...”命令):
在存储库的主目录中:
$ ls -a
1、打开“.gitmodules”,你会发现这样的东西:
[submodule "XXX"]
path = XXX
url = git@github.com:YYY/XXX.git
将最后一行更改为您需要拉取的存储库的 HTTPS:
[submodule "XXX"]
path = XXX
https://github.com/YYY/XXX.git
保存“.gitmodules”,然后运行子模块的命令,“.git”将被更新。
2. 打开“.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
将最后一行更改为您需要拉取的存储库的 HTTPS:
url = https://github.com/YYY/XXX.git
因此,在这种情况下,主要问题只是 url。现在可以在存储库页面顶部找到任何存储库的 HTTPS。
确保 ssh-add -l
显示 SSH 密钥的指纹,该指纹出现在您的 Github 帐户的 SSH 密钥列表中。
如果输出为空,但您知道您有一个与您的 github 帐户一起使用的私有 SSH 密钥,请在此密钥上运行 ssh-add
(在 ~/.ssh
中找到。它默认命名为 id_rsa
,因此您可能会运行ssh-add id_rsa
)。
否则,请按照 these instructions 生成 SSH 密钥对。
我之前在我的一个 php 项目中使用了 github。在使用 github 时,我使用的是 ssh 而不是 https。我的 machine set up 就是这样,每次我提交和推送代码时,它都会询问我的 rsa 密钥密码。
几天后,我停止了 php 项目的工作并忘记了我的 rsa 密码。最近,我开始从事一个 java 项目并转移到 bitbucket。因为,我忘记了密码并且我猜是 no way to recover it,所以我决定为新项目使用 https(推荐)协议,并在问题中遇到了同样的错误。
我是怎么解决的?
运行这个命令告诉我的 git 使用 https 而不是 ssh: git config --global url."https://".insteadOf git:// 删除任何远程,如果有的话 git remote rm origin 重做从 git init 到 git push它有效!
PS:我还在调试过程中从我的机器上卸载了 ssh,认为删除它可以解决问题。是的,我知道!! :)
是的,我也有这个问题:/ 我打算以 HTTP 类型(不是 SSH 类型)将我的项目推送到 Github。我必须在每次推送中输入我的用户名和密码。所以首先我输入了与以下类型相关的代码
git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
我得到了
git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。
所以我通过以下方法解决了我的问题
git remote rm origin 删除您的 git 远程存储库 git remote now 检查您的远程远程存储库是否已被删除
URL = https://github.com/<用户名>/<存储库>.git
git remote add origin URL 再次添加您的 URL 以创建远程存储库 git push -u origin master 您可以将您的内容推送到远程存储库。在这里,当您使用“-u”命令创建一个跟踪分支并在远程存储库中跟踪分支的帮助下,您不会告诉 git 您在接下来的步骤中推送哪个分支:) 如果您使用这里linux git 在推送内容之前会询问用户名和密码。并提供您的相关凭据。
为了防止在每次推送中提供用户名和密码,您必须更改 git config
列出你的 git config - git config --global --list 你会看到
user.name=<your_username>
user.email=<your_email>
因此,您必须将 credential.helper 属性添加到您的 git 配置中
5.git config --global --add credential.helper store
将此添加到您的终端 现在您可以将新项目添加到您的文件中,然后 git add.
、git commit -m "<message>"
、 git push
现在 git 也会请求您的用户名和密码,这将是上次。对于下一个 git pushes,git 不会向你请求用户名和密码 :)
好的,这个解决方案很少,其中一些可能已经被提及,但只是为了将它们放在一起:
确保您的密钥存在,默认情况下另一个 ~/.ssh/ 文件夹,即 id.rsa 和 id.rsa.pub
确保密钥具有正确的权限,您可以运行 chmod: chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub
确保您的公钥 (id_rsa.pub) 的内容与远程存储库配置中上传的内容相匹配
最后修复 ssh 代理的问题:ssh-add
更多信息:https://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html
chmod
之前默默地发生了。谢谢。
解决这样的错误
git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限
解决方案 (OSX)
打开您的终端并按照以下命令进行操作
$光盘~
$须藤苏
ssh-keygen 输入保存密钥的文件(/var/root/.ssh/id_rsa): $ id_rsa 输入密码(没有密码为空): $ hit enter 再次输入相同的密码: $ hit enter
输入保存密钥的文件 (/var/root/.ssh/id_rsa): $ id_rsa
Enter passphrase (empty for no passphrase): $ hit enter
再次输入相同的密码:$ 回车
cd ~/.ssh
$猫id_rsa.pub
复制显示内容。
打开 GitHub 单击您的个人资料图标设置>SSH 和 GPC 密钥
单击新的 ssh 密钥按钮
输入您复制的任何标题和密钥
现在检查您的问题已解决
允许对密钥(身份)进行写访问,然后单击添加密钥
https://i.stack.imgur.com/4LMTP.png
如果在 Windows 上,请在 Using Github via SSH 中查看更多详细信息。
我最近有同样的问题。如果您需要立即修复,这可能会有所帮助,但每次重新启动系统时都需要这样做
从终端运行:ssh-add ~/.ssh/id_rsa
输入您的系统密码,这应该可以工作。
我想补充一些我的发现:
如果您使用 GitBash
,请确保 SSH 密钥存储在 ~/.ssh/id_rsa
中。
默认情况下,GitBash
搜索 ~/.ssh/id_rsa
作为 SSH 密钥的默认路径。
甚至文件名 id_rsa
也很重要。如果您将 SSH 密钥保存在其他文件名或路径中,则会引发Permission Denied(publickey)
错误。
如果您已经创建了 SSH 密钥并且仍然收到错误,那是因为您需要授予用户权限来读取和写入您正在克隆到的文件夹。为此,sudo chmod 777 <your_folder_name_here>"
。当然,这是在您生成 SSH 密钥之后,您仍然会收到此错误。希望这对未来的用户有所帮助。
编辑
如果您使用的是 git bash,请在 Windows 中添加到此使用 admin
sudo chown -R $USER:$USER <your_folder_name_here>
TLDR:
确保您具有对 repo 的写入权限(从 repo 的设置中配置它)。确保公钥在您的 github 帐户的 SSH 和 GPG 密钥中。
对我来说,当我尝试从新安装的机器克隆一些 repo 时,通常会发生此错误。 github 收到请求时,首先会检查公钥哈希。如果公钥不匹配任何用户,github 将拒绝此请求。如果机器是新机器并且您的 ssh 密钥是新生成的,这种情况很常见。
您可以使用 Https url 登录
我猜您在说 git push 时尝试使用 ssh url 登录,如果它只询问密码,则认为您是通过 ssh 连接的。最好使用 http url。
同样在 ubuntu 中,即使在 BitBucket 的设置中已经输入了 SSH 密钥,我也遇到了这个问题。原因是,我正在尝试以下操作:
sudo git push origin master
不知道为什么,但它通过使用解决了
git push origin master
没有使用 sudo。
对我来说,我试过这个 -
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
我希望它会帮助别人:)
我遇到了与@Batman 类似的问题。但是,因为我在 /usr/local/src/projectname 下运行它,所以不使用 sudo 运行不是一个选项。
只需添加 -E 标志来保存环境(您的 ~/.ssh/ 路径)。
$ sudo -E git clone git@your_repo
从人须藤:
-E, --preserve-env 向安全策略指示用户希望保留他们现有的环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。
我在远程主机上使用 git pull
搜索类似错误消息的解决方案时找到了此页面:
$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我通过 ssh -AY remote_hostname
从本地计算机连接到远程主机。这不是 OP 问题的解决方案,但对遇到此页面的其他人很有用,因此在此处发布。
请注意,在我的情况下,git pull
在我的本地机器上运行良好(也就是说,已设置 ssh 密钥,并已添加到 GitHub 帐户等)。我通过将其添加到笔记本电脑上的 ~/.ssh/config
解决了我的问题:
Host *
ForwardAgent yes
然后我用 ssh -AY remote_hostname
重新连接到远程主机,现在 git pull
可以工作了。配置中的更改可以将我的 ssh 密钥对从本地机器转发到任何主机。 ssh
的 -A
选项实际上在该 ssh 会话中转发它。 See more details here.
https://i.stack.imgur.com/jLDVs.png
以管理员身份打开终端运行以下命令:“ssh-keygen”。它会生成一个 ssh 密钥,并将显示创建它的文件夹。检查我的图像复制生成的“ssh key”去你的github配置文件--->设置--->点击SSH和GPH--->点击“”New SSH Key Button”并粘贴“ssh key”最后“点击添加按钮”
如果您使用的是 GitHub for Mac UI,请检查首选项以确保您已登录。
ssh -vT git@github.com
来帮助调试您的存储库使用的密钥。我建议您将其添加到您的答案中。ssh -vT git@github.com
提供了很多关于它为什么不起作用的信息。