GitHub错误消息-权限被拒绝(公钥)

有人看到这个错误,知道该怎么做吗?

我正在使用终端,我在根目录中,GitHub存储库存在,我不知道现在该怎么办。

> git push -u origin masterPermission denied (publickey).fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.
1467479 次浏览

您需要生成一个SSH密钥(如果您没有)并将公钥与您的Github帐户相关联。请参阅GitHub的留档

GitHub无法对您进行身份验证。因此,要么您没有设置SSH密钥,因为您没有在你的机器上设置一个,要么您的密钥与您的GitHub帐户没有关联。

您还可以使用HTTPS URL而不是SSH /gitURL,以避免处理SSH密钥。

此外,GitHub有一个专门针对该错误消息的帮助页面,并更详细地解释了您可以检查的所有内容。

这发生在我身上。由于某种原因,我的起源在我没有意识到的情况下被搞砸了:

检查您的设置是否仍然正确

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密钥。打开终端并运行:

ls -al ~/.ssh
#or
cd ~/.sshls

这将列出您的. ssh目录中的文件

最后,取决于你所看到的(在我的情况下):

 github_rsa  github_rsa.pub known_hosts

只需尝试设置您的RSA,希望这将解决您的“git推送源”问题

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

注: RSA证书是密钥配对的,因此您将拥有一个私有证书和一个公共证书,私有证书将无法访问,因为它属于github(在这种情况下),但当此错误发生时,您可能会缺少公共证书(至少这是我的情况,我的github帐户或存储库以某种方式搞砸了,我必须“链接”公钥,之前生成的)

您是否在~/. ssh目录中创建了配置文件?它应该包含以下内容:

Host github.comIdentityFile ~/.ssh/github_rsa

假设您创建了一个名为github_rsa的ssh密钥

并将其上传到GitHub…

注意:如果您的~/. ssh/目录中有超过1个密钥(2个或更多),则必须遵循这种显式配置方式。如果您不以这种方式指定密钥,则会获取顺序中的第一个密钥并用于github身份验证,因此它取决于然后的密钥文件名。

确保ssh-add -l显示SSH密钥的指纹,该密钥存在于Github帐户的SSH密钥列表中。

如果输出为空,但您知道您有一个适用于您的github帐户的私有SSH密钥,请在此密钥上运行ssh-add(在~/.ssh中找到。默认情况下它的名称为id_rsa,因此您可能会运行ssh-add id_rsa)。

否则,按照这些指示生成SSH密钥对。

您的SSH代理可能未启用你可以试试看

  1. 下载git

  1. 安装它

  2. 启用ssh代理

C:\Program Files\Git\cmd

启动SSH代理

如果您使用的是GitHub for Mac UI,请检查首选项以确保您已登录。

我在“git ush”期间遇到了同样的错误。在客户端,我有两个起源和主。我删除了一个,然后它工作正常。

我知道这个问题。添加ssh key后,也将您的ssh key添加到ssh代理(来自官方文档

ssh-agent -sssh-add ~/.ssh/id_rsa

一切正常后,git可以查看正确的键,之前不能。

您可以使用Https URL登录

我猜你想用ssh URL登录当你说git推送时,如果它只要求密码,考虑你是通过ssh.better连接的,你使用超文本传输协议url。

我想我有最好的答案给你,你的git应用程序读取你的id_rsa.pub在根用户目录

/home/root/.ssh/id_rsa.pub

这就是为什么你在 /home/your_username/.ssh/id_rsa.pub中的密钥不能被git读取。所以你需要在 /home/root/.ssh/中创建密钥

$ sudo su$ ssh-keygen$ cd ~/.ssh$ cat id_rsa.pub

然后将密钥复制到您的github帐户中。这对我来说很有效。你可以试试。

我之前在我的一个php项目中使用github。在使用github时,我使用的是ssh而不是https。我的机器设置就像那样,每次我提交和推送代码时,它都会问我的rsa密钥密码。

几天后,我停止了在php项目上的工作,忘记了我的rsa密码。最近,我开始在一个java项目上工作,并转移到bit桶。由于我忘记了密码,我猜有没有办法恢复它,我决定为新项目使用https(推荐)协议,并得到了与问题中相同的错误。

我是怎么解决的?

  1. 运行此命令告诉我的git使用https而不是ssh:

    git config --global url."https://".insteadOf git://
  2. Remove any remote if any

    git remote rm origin
  3. 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!! :)

假设您通过SSH连接GitHub,您可以运行以下命令来确认这一点。

$git config --get remote.origin.url

如果您得到的结果格式git@github.com:xxx/xxx.github.com.git,则应执行以下操作。

生成一个SSH密钥(或使用现有的密钥)。如果您有,您只需要将密钥添加到ssh代理(步骤2)和您的GitHub帐户(步骤3)。

下面是给那些没有钥匙SSH人的。

步骤1生成公共/私有rsa密钥对。

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

系统将要求您确认保存SSH密钥的位置以及要使用的密码。

步骤2将您的密钥添加到ssh代理

  • 确保启用ssh代理

    $eval "$(ssh-agent -s)"

  • 将SSH密钥添加到ssh代理:

    $ssh-add ~/.ssh/id_rsa

步骤3将SSH密钥添加到您的帐户

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

然后将复制的密钥添加到GitHub

转到设置->SSH钥匙(个人设置侧栏)->添加SSH密钥->填写表单(键在剪贴板上,只需使用ctrl+v)->添加密钥

完成以上步骤后,您应该解决权限问题。

参考链接:生成SSH密钥.

如果您没有访问自己的存储库,或者在克隆的存储库中进行克隆(使用一些“git子模块…”命令):

在存储库的主目录中:

$ ls -a

1.打开“. git模块”,,你会发现这样的东西:

[submodule "XXX"]path = XXXurl = git@github.com:YYY/XXX.git

将最后一行更改为您需要拉取的存储库的HTTPS

[submodule "XXX"]path = XXXhttps://github.com/YYY/XXX.git

保存“. git模块”运行子模块的命令,以及“. git”将被更新。

2.打开“. git”,转到“config”文件,你会发现如下内容:

[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = trueignorecase = trueprecomposeunicode = true[remote "origin"]url = https://github.com/YYY/XXX.gitfetch = +refs/heads/*:refs/remotes/origin/*[branch "master"]remote = originmerge = refs/heads/master[submodule "XXX"]url = git@github.com:YYY/XXX.git

将最后一行更改为您需要拉取的存储库的HTTPS

    url = https://github.com/YYY/XXX.git

因此,在这种情况下,主要问题只是url。现在可以在存储库页面顶部找到任何存储库的HTTPS。

同样在ubuntu中,即使在BitBucket的设置中已经输入了SSH密钥,我还是遇到了这个问题。原因是,我正在尝试以下操作:

sudo git push origin master

不知道为什么,但通过使用

git push origin master

没有使用sudo。

如果您已经创建了一个SSH密钥,但仍然收到错误,这是因为您需要授予用户读取和写入您要克隆到的文件夹的权限。为此,sudo chmod 777 <your_folder_name_here>"。当然,这是在您生成SSH密钥之后,您仍然会收到此错误。希望这有助于未来的用户。

编辑

如果您使用的是git bash,请在Windows中使用admin来添加此功能

你可以试试这个方法…

在此处输入图片描述

在此处输入图片描述

选择另一个链接

对我来说,我试过这个-

eval "$(ssh-agent -s)"

然后我跑

ssh-add ~/.ssh/path-to-the-keyfile

并生成你可以运行的密钥

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这将生成一对密钥(公共和私有)。

您可以将此密钥存储到github以获取更多阅读此将新的SSH密钥添加到您的GitHub帐户

希望对别人有帮助:)

我想补充一些我的发现:

如果您使用的是GitBash,请确保SSH密钥存储在~/.ssh/id_rsa中。

By DefaultGitBash搜索~/.ssh/id_rsa作为SSH键的默认路径。

即使是文件名id_rsa也很重要。如果您将SSH键保存在另一个文件名或路径中,它将抛出Permission Denied(publickey)错误。

我有同样的问题最近这可能有助于如果你需要一个修复立即但这需要这样做每次你重新启动您的系统

从终端,运行:ssh-add ~/.ssh/id_rsa

输入您的系统密码,这应该工作。

转到您的GitHub帐户仪表板,找到您的项目存储库,单击设置选项卡-在部署密钥下,您必须添加您的SSH密钥。打开终端并键入:

cat ~/.ssh/id_rsa.pub | pbcopy

这将从您的id_rsa.pub文件中复制密钥。因此,只需返回GitHub仪表板,粘贴它,单击添加密钥即可。

同样的解决方案也适用于比特桶账户。

我得到了这个错误。原来我刚刚将OSX升级到Sierra,我的旧密钥不再注册。

一开始我以为是“升级到macOS Sierra将破坏您的SSH密钥并将您锁定在自己的服务器之外。

但我避开了那个。结果我只需要重新注册我现有的密钥:

ssh-add -K

然后输入密码…完成!

我遇到了和@Batman类似的问题,但是,因为我是在 /usr/local/src/projectname下运行的,所以没有sudo就不能运行。

只需添加-e标志即可预置环境(您的~/. ssh/path)。

$ sudo -E git clone git@your_repo

来自man sudo:

-E,--保存环境向安全策略指示用户希望预先服务于他们现有的环境变量。安全如果用户没有许可证,策略可能会返回错误-为了保护环境

我在ssh代理中加载了2个Github身份文件。我的个人密钥和另一个用于客户端项目。

我删除了导致混乱的关键:

ssh-add -d id_rsa_github_somekey

一旦发生这种情况,就是在创建存储库后按照GitHub说明进行操作。Git会指示您使用类似的东西添加远程。

git remote add origin git@github.com:<user>/<project>.git

将<>中的内容替换为与您的帐户相关的值。

解决方案是删除.git后缀。添加远程如下:

git remote add origin git@github.com:<user>/<project>

另一种解决方案:

创建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密钥)下添加您的公钥。

tl; dr

~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

场景如果您使用的是openSSH>7版本,例如在触摸屏MacBook Pro上,它是ssh-V
OpenSSH_7.4p1, LibreSSL 2.5.0

您还有一台较旧的Mac,它最初将您的密钥放在Github上,可能使用的是id_dsa密钥。OpenSSH v7默认情况下不会使用这些DSA密钥(包括此ssh-dss),但您仍然可以通过将以下代码放入您的~/.ssh/config来添加它

PubkeyAcceptedKeyTypes=+ssh-dss

对我有用的来源是这个Gentoo通讯

现在您至少可以使用GitHub,然后将密钥修复为RSA。

这对我有用:

1.删除所有来源

git remote rm origin

(参见https://www.kernel.org/pub/software/scm/git/docs/git-remote.html

管理您跟踪其分支的存储库集(“远程”)。

*rm:"删除已命名的远程服务器。删除远程服务器的所有远程跟踪分支和配置设置。"

2.检查所有已删除:

git remote -v

3.添加新的源主

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

这是所有的人!

将GitHub添加为远程时,请使用此页面的URL。它不会导致任何此类错误并推送代码

使用Https很好,请运行git config --global credential.helper wincred来创建一个为您存储凭据的Github凭据助手。如果这不起作用,那么您需要编辑.git目录中的config文件并将源更新为https url。

有关github文档,请参阅此链接

我在远程主机上使用git pull搜索类似错误消息的解决方案时发现了此页面:

$ git pullPermission denied (publickey).fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.

我通过ssh -AY remote_hostname从本地机器连接到远程主机。这不是OP问题的解决方案,但对遇到此页面的其他人很有用,所以在这里发布。

请注意,在我的情况下,git pull在我的本地机器上运行良好(即,已设置ssh密钥并添加到GitHub帐户等)。我通过将其添加到笔记本电脑上的~/.ssh/config来解决我的问题:

Host *ForwardAgent yes

然后我用ssh -AY remote_hostname重新连接到远程主机,git pull现在工作了。配置中的更改使我能够将我的ssh密钥对从本地机器转发到任何主机。-Assh的选项实际上是在该ssh会话中转发它。点击这里查看更多详情。

如果将ssh访问更改为对远程存储库的https访问,问题已解决:

git remote set-url origin https_link_to_repository
git push -u origin master

好的,这个问题的解决方案很少,其中一些可能已经提到了,但只是为了保持它们在一起:

  • 确保密钥存在,默认情况下是另一个~/. ssh/文件夹,即id.rsa和id.rsa.pub

  • 确保密钥具有正确的权限,您可以运行chmod:

    chmod 600~/. ssh/id_rsa

    chmod 644~/. ssh/id_rsa.pub

  • 确保您的公钥(id_rsa.pub)的内容与远程存储库配置中上传的内容相匹配

  • 最后修复ssh代理的问题:ssh添加

更多信息:https://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html

我在AWS CodeCommit上遇到了同样的问题。所有这些都在一台笔记本电脑上工作,但在另一台笔记本电脑上却没有。解决方案是从带有AWS配置的部分的. ssh/config中删除“PreferredAuthentiations公钥”行。

允许对密钥(标识)进行写访问,然后单击添加键

输入图片描述

如果在Windows上,请检查通过SSH使用Github中的更多详细信息。

这招对我管用

GitHub中有2 options-HTTPS/SSH

I had selected SSH由于错误而发生的错误-_-

切换到HTTPS然后再次复制URL并尝试:)

我有同样的问题,但没有一个答案有效,但一个简单的解决方案有效。但请注意,我确实按照答案的建议添加了ssh key。不确定这是否真的有帮助。不管怎样,这就是终于奏效了:

使用git遥控器将遥控器的URL从HTTPS更改为SSHset-url命令。$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git。验证远程URL已经改变了

是的,我也有这个问题:/我打算以HTTP类型(不是SSH类型)将我的项目推送到Github。我必须在每次推送中输入我的用户名和密码。所以首先我输入了与下面类型相关的代码

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

然后我得到了

git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库读取。

所以我通过下面的方法解决了我的问题

  1. git remote rm origin 删除您的git远程存储库
  2. git remote 现在检查您的远程存储库是否已被删除

url=https://github.com/<username>/<repository>.git

  1. git remote add origin URL 再次添加您的URL以创建远程存储库
  2. git push -u origin master
    你可以将你的内容推送到远程存储库。在这里,当你在命令中使用“-u”时,你会创建一个跟踪分支,并在远程存储库中跟踪分支的帮助下,你不会告诉git你在接下来的步骤中推送的分支:)
    这里如果你使用linux git会在推送内容之前询问用户名和密码。并给出你的相关凭据。

用于防止在每次推送中提供用户名和密码您必须更改git配置

列出您的git配置-git config --global --list
你会看到

user.name=<your_username>user.email=<your_email>

所以你必须在你的git配置中添加credential.helper属性在这里

5.git config --global --add credential.helper store将此添加到您的终端现在您可以将新项目添加到您的文件中,然后git add.git commit -m "<message>" git push
现在git也会请求你的用户名和密码,这将是最后一次。对于下一次git推送,git不会向你请求用户名和密码:)

我试图解决类似的问题与小时。最后,我删除了所有的密钥,使新的密钥没有密码,终于摆脱了这个问题。

问题是SSH密码,需要删除!

如果您在与企业Github帐户建立连接时遇到问题,请按照以下步骤操作

解决方案#1

ERROR: git@github.com: Permission denied (public key). fatal: Could not readfrom remote repository. Please make sure you have the correct accessrights

解决方案(OSX)

  • 打开您的终端并按照以下命令操作

  • $cd~

  • $sudo su

  • $ssh-keygen

    • 输入保存密钥的文件(/var/root/. ssh/id_rsa):$id_rsa
    • 输入密码(没有密码为空):$点击回车
    • 再次输入相同的密码:$点击回车
  • $cd~/. ssh

  • $猫id_rsa.pub

  • 复制显示内容。输入图片描述

  • 打开GitHub单击您的个人资料图标设置>SSH和GPC密钥

  • 点击新的ssh键按钮输入图片描述

  • 输入您复制的任何标题和密钥输入图片描述

  • 现在检查您的问题已解决

解决方案#2

ERROR 2: remote: Password authentication is not available for Git operations.remote: You must use a personal access token or SSH key.remote: See https://github.compnay.com/settings/tokens or https://github.compnay.com/settings/sshfatal: unable to access 'https://github.company.com/repo/app.git/': The requested URL returned an error: 403

2021年8月13日取消了对密码认证的支持。请改用个人访问令牌。

https://namespaceit.com/blog/remote-support-for-password-authentication-was-removed-on-august-13-2021-please-use-a-personal-access-token-instead

输入图片描述如果你正在使用Widows-10,请遵循此说明。它对我有用。

  1. 以管理员身份打开终端

  2. 运行此命令:“ssh-keygen”。它会生成一个ssh密钥并显示创建它的文件夹。检查我的图像输入图片描述

  3. 复制生成的“ssh密钥”

  4. 转到您的github配置文件--->设置-->单击SSH和GPH-->单击新建SSH密钥按钮并粘贴ssh密钥,最后单击添加按钮

TLDR:

  1. 确保您对存储库具有write访问权限(从存储库的settings配置它)。
  2. 确保公钥位于您的github帐户的SSH and GPG keys中。

对我来说,这个错误通常发生在我尝试从新安装的机器上克隆一些repo的时候。当收到请求时,github会首先检查公钥哈希。如果公钥与任何用户不匹配,github会拒绝这个请求。如果机器是新的,你的ssh密钥是新生成的,这种情况很常见。

我也遇到了这个问题,因为我使用了几个GIT帐户以及不同的工作和大学帐户,这对我很有效:

->转到您的ssh配置

cd ~/.ssh/vim config

->复制以下块并填写要推送到/使用的主机和用户

Host [Hostname]User [User]PubkeyAcceptedAlgorithms +ssh-rsaHostkeyAlgorithms +ssh-rsa

我遇到了一些主机名的问题,所以现在我的ssh配置文件中有几个这样的配置。

以防其他人需要这个。我在用户的. ssh文件夹中创建了一个名称不同的ssh密钥,例如ar-2022-ssh。这样做的问题是检查现有SSH密钥指定GitHub支持的公钥是以下之一。

id_rsa.pubid_ecdsa.pubid_ed25519.pub

一旦我在生成密钥时将我的ssh密钥名称更改为其中之一,它就可以连接到GitHub

设置SSH访问GitHub的完整步骤已经发布在ServerFault上。

查看@Alex的答案:https://serverfault.com/a/1088209/416091

在2022年7月24日,我应该在SSH用户配置文件(~/.ssh/config)中将服务器和端口设置为ssh.github.com:443。

这可能是由于您SSHKey/GPG需要在您的组织github或gitBay站点上进行更新。按照以下步骤来解决它:

  1. 在cmd上:type>>$ssh-keygen-t rsa-C"your_email@example.com"(导致创建id_rsa和id_rsa.pub)
  2. sshid_rsa
  3. cat~/. ssh/id_rsa.pub并复制密钥并转到您的org bit桶/github站点并将其粘贴到ssh密钥上

这个答案与其他答案略有不同,但在其他情况下,您可以在系统上正确配置SSH密钥,并且仍然会遇到这种情况。

我在隔离环境中的python子进程中运行git命令时遇到了这个问题(例如使用Tox)。我通过传递SSH_AUTH_SOCKSSH_AGENT_PID env变量修复了它。

解决问题的步骤这里

我在SourceTree上遇到了这种情况在我的情况下,我的公钥-私钥对出了问题。所以我删除这对并生成新的解决我的问题