错误:找不到存储库.致命:无法从远程存储库读取.请确保您具有正确的访问权限,并且存储库存在



昨天我创建了一个ssh密钥并克隆了一个存储库。在进行一些更改后,我尝试推送提交:

git push
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

我已经阅读了这篇活跃的SO帖子。我的问题仍然存在。我不知道如何追踪这个问题,所以会分享我认为相关的所有内容。

在我的笔记本电脑上,我有个人和工作存储库。我的工作工作位于嵌套在~/Documents/Projects/Zen/Projects/下的任何目录中。其他任何地方,例如~/Documents/Projects/Personal/适用于个人github。

我的 .gitconfig 看起来像这样:

[user]
email = 12345+doug@users.noreply.github.com
name = 12345doug
[includeIf "gitdir:/home/doug/Documents/Projects/Zen/"]
path = ~/.git-zen

/.git-zen 看起来像这样:

[user]
email = doug@work.com
name = doug-work

目前我在存储库中:

pwd
/home/doug/Documents/Projects/Zen/Projects/analytics-psql-action

有一些提交准备推送:

~/Documents/Projects/Zen/Projects/analytics-psql-action$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)

我在这个目录中的 git 配置似乎是正确的:

git config user.name
doug-work

git config user.email
doug@work.com

为了创建我的 ssh 密钥,我在 github.com 上关注了这篇文章。

ssh-keygen -t rsa -b 4096 -C "doug@work.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

然后,我将本教程中的密钥添加到我的工作 github 设置中。

到目前为止,我认为我已经设置了一切,应该吗?但是当我尝试从这个存储库中推送时:

~/Documents/Projects/Zen/Projects/analytics-psql-action$ git push
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

无奈之下,我重命名了存储库并尝试从新克隆:

git clone git@github.com:work/analytics-psql-action.git # real path actually used not 'work'
Cloning into 'analytics-psql-action'...
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights

在存储库本身上,如果我进入存储库设置>管理访问权限,我可以看到自己,doug-work 具有管理员访问权限。

如何克隆并推送到存储库?我应该从哪里开始尝试找出为什么我的 ssh 密钥设置不起作用?

首先,一些背景知识:在您在此处使用的URL中:

git clone git@github.com:...

这个问题唯一真正重要的部分是git@github.com部分。 你也可以拼写这个:

git clone ssh://git@github.com/...

(使用完全相同的文本其余部分代替...)具有完全相同的效果。

接下来,若要诊断问题,需要从命令行运行ssh

ssh -T git@github.com

您的 URL 是否git@corp.com您想在此处运行ssh -T git@corp.com,依此类推。 也就是说,我们采用user@host部分并运行ssh -T user@host. 这使得这适用于各种公司托管的分支变体,而不仅仅是 GitHub。 它还允许我们在 GitHub上使用多个登录名:请参阅下面的更多内容。

现在,运行ssh -T git@github.com您可能会收到权限被拒绝错误,这意味着您尝试使用的任何密钥不起作用 github.com,或者您可以获得这种输出:

Hi M! You've successfully authenticated, but but GitHub does not provide shell access.

(在这里,我们已经向GitHub验证了自己为M,詹姆斯邦德间谍部门的负责人。

现在,如果 M 有权访问(读取和写入)存储库,我们将能够读取和写入存储库。 但也许 M 只有读取权限,实际上Q具有写入权限。 我们偷了M和Q的钥匙,但是我们如何以Q的身份进入?

在我们讨论这一点之前,让我们看看如果这种身份验证完全失败该怎么办。 我们的下一步是运行:

ssh -Tv git@github.com

这会产生大量输出,所有输出都以debug1为前缀。 这里可能有一些关于出了什么问题的线索。 如果没有,我们可以使用ssh -Tvvssh -Tvvv,以获得更多的调试输出,前缀为debug2debug3。 在查看所有这些输出时,这里的常见嫌疑人是确保 ssh 正在查看存储 ssh 密钥的正确.ssh/*文件。 确保:

  • SSH有正确的道路;
  • ssh 在其中尝试正确的文件;和
  • 它实际上可以读取这些文件。

如果没有,请寻找特定于操作系统的方法,为 ssh 提供正确的权限和/或路径。

使用多个身份

作为闯入军情五处记录的邪恶间谍,我们已经泄露了M和Q的密钥,我们现在希望将我们的特洛伊木马插入系统,以便我们可以尝试为詹姆斯邦德进行过于精心设计的死亡。 但那是以后的事了:现在,我们以 M 的身份进入,但我们需要以 Q 的身份进入。 我们该怎么办

为了以Q而不是M的身份进入 GitHub,我们需要正确配置 ssh。 原因很简单:只在.ssh目录中列出我们所有的密钥是行不通的。 ssh 按某种顺序尝试它们,显然,我们的 ssh 首先尝试我们的M键。 一旦它起作用,它就会进入,并且 ssh 停止尝试进一步的密钥。

我们需要让我们的 ssh 先尝试我们的Q键。 我们可以删除M 的密钥,但这很烦人:现在我们可以植入我们的特洛伊木马,但我们找不到邦德的当前分配,只有 M 才能读取。 我们想要的是一种选择我们将尝试的键的方法。

这是.ssh/config文件的用武之地:

Host as-q
Hostname github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/stolen-q-key
Host as-m
Hostname github.com
User git
IdentitiesOnly yes
IdentityFile ~/.ssh/stolen-m-key

现在我们可以将我们的两个存储库列为ssh://as-m/mi5/bond-assignments.gitssh://as-q/mi5/spy-devices.git,或as-m:mi5/bond-assignments.gitas-q:mi5/spy-devices.git. (也就是说,一旦您使这部分正常工作,您将需要更新与克隆关联的 URL。 使用git remote set-url originnew-urlgit config --edit或任何您最喜欢的方式来实现此目的。

当我们ssh as-q时,我们将让ssh连接到 github.com(Hostname),使用git作为用户名,并使用被盗的Q密钥作为密钥。 当我们ssh as-m时,我们将连接到同一主机并使用相同的用户,但这次使用被盗的M密钥。

我做了所有这些,ssh工作,但Git-for-Windows仍然没有

您还遇到了另一个问题:

  • 旧版本的Windows没有或不足的ssh。
  • 所以 Git-for-Windows 捆绑了一个 ssh(就像它捆绑了一个版本的 bash 一样:git-bash 并不是 Git的一部分,它只需要使用 Git,捆绑的 ssh 也不是 Git 的一部分,它只需要使用Git)。
  • 但是捆绑的 ssh 和系统 ssh 是使用不同配置文件的不同版本

如果系统 ssh工作正常,告诉 Git 使用系统 ssh,例如git config --global core.sshCommand ssh。 如果它不够,请使用捆绑的 ssh(但是你上面的测试是如何工作的?

如果您在添加 SSH 密钥后仍然遇到问题,请尝试此操作。

git remote -v

这将向您显示远程SSH URL,

git 远程设置网址来源 "SSHURL">

将 URL 粘贴到上面 SSHURL 所在的行中。

最新更新