Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 不能推送至远程回购-“;请确保您拥有正确的访问权限,并且存储库存在。”;_Git_Github_Ssh - Fatal编程技术网

Git 不能推送至远程回购-“;请确保您拥有正确的访问权限,并且存储库存在。”;

Git 不能推送至远程回购-“;请确保您拥有正确的访问权限,并且存储库存在。”;,git,github,ssh,Git,Github,Ssh,由于在推动我的私人项目和工作项目之间进行转换,我经常面临身份验证问题。每次我从工作环境转移到个人环境时,我都会花一些时间处理ssh密钥和配置。我经常阅读github文档,了解如何生成ssh公钥并将其添加到站点 今天,我得到: ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the r

由于在推动我的私人项目和工作项目之间进行转换,我经常面临身份验证问题。每次我从工作环境转移到个人环境时,我都会花一些时间处理ssh密钥和配置。我经常阅读github文档,了解如何生成ssh公钥并将其添加到站点

今天,我得到:

ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
我尝试生成一个新的ssh密钥对并将公钥提交给github,但github说“密钥已在使用”。我在谷歌上搜索了一下,但无法完全理解那个错误信息

切换设备时,我注意到在运行命令
ssh-T时git@github.com
,输出作为与我的个人帐户用户名关联的Github用户而不是与我的工作帐户用户名关联的Github用户向我致意

我对ssh的理解是,它在某种意义上是“无账户的”。ssh连接过程中没有用户名或密码。因此,现在我认为身份验证问题围绕着一些系统,这些系统认为我是以我的私人github帐户的用户名登录的,我能做什么?

github如何知道你是谁 我对ssh的理解是,它在某种意义上是“无账户的”。ssh连接过程中没有用户名或密码。因此,现在我相信身份验证问题围绕着一些系统,这些系统认为我是以我的私人github帐户的用户名登录的

你是对的:问题是GitHub对你的GitHub用户名做了一个假设,但它并不总是适合你当前的需要

所有SSH连接都有一个用户名。对于GitHub,它总是“git”。这是GitHub URL的“git@”部分,例如

git@github.com:username/projectname.git
github.com-personal
就SSH而言,用户名总是“git”

但是GitHub(在服务器上运行的应用程序)有另一层。它查看您用来进行身份验证的SSH密钥,并查找哪个GitHub用户拥有与其帐户关联的密钥这就是它如何将SSH连接映射到GitHub用户名的方式

问题 您在GitHub上有多个帐户。所以你需要一种方法来控制你使用的是哪一种。但是默认情况下,SSH将始终为“github.com”使用相同的密钥

解决方案 (以下假设为macOS或Linux-如何在Windows中执行此操作不同,但相同的概念适用。)

您可以通过映射不同的虚拟主机名来控制使用哪个密钥

假设你有两把钥匙

  • ~/.ssh/id\u github\u工作
  • ~/.ssh/id\u github\u personal
您可以在
~/.ssh/config
中设置如下配置文件:

Host github.com-work
    Hostname github.com
    Username git
    IdentityFile ~/.ssh/id_github_work

Host github.com-personal
    Hostname github.com
    Username git
    IdentityFile ~/.ssh/id_github_personal
现在,您可以使用主机名控制使用哪个键。您可以这样克隆:

git clone github.com-personal:yourusername/projectname
它将使用您的个人密钥。要使用另一个键,只需使用另一个主机名

为什么会这样 SSH将在URL中看到主机名,例如

git@github.com:username/projectname.git
github.com-personal
在执行其他操作之前,它会查看自己的配置,以查看是否有任何参数与该主机名关联。由于此主机名与我们添加到
~/.ssh/config
中的条目匹配,因此它将加载这些参数

其中一个参数,
Hostname
,告诉SSH我们给它的主机名不是服务的真实主机名。SSH(因此Git)仍将连接到主机名“github.com”,但它将使用此SSH配置文件指定的SSH密钥(和用户名)

固定现有回购协议 如果您已经拥有回购协议,则无需重新克隆它。您只需更改URL即可

git remote set-url origin github.com-personal:yourusername/projectname
吉特护照
您也可以按照RichouHunter在评论中的建议进行尝试。我没有使用该工具的经验,因此我不能担保,但它似乎试图解决同样的问题。

我不确定它与您有多相关,但您可能想检查一下。根据我所了解的,这不需要任何第三方工具。我不熟悉在克隆url中附加
-某物
。通常一个ssh url
X
,我想克隆一下git@github.com:Work/ourProduct.git。所以我运行了
git clone X
。什么系统处理
-personal
的url模式?吉特?嘘?--换句话说,github如何知道什么是github.com personal:repoPath?难道它不知道这个repo存在于github.com/repoPath吗?或者ssh只是通过从ssh配置文件中查找来将github-personal.com替换为github.com吗?@AlexBollbach ssh使用
github.com personal
~/.ssh/config
加载配置文件。该配置文件的
Hostname
参数就是它实际连接到的主机。感谢您提供了这个非常有用的答案!在配置文件中使用单独的主机映射到github映射到两个不同帐户的不同ssh密钥对的组合是我自己无法理解的,尽管阅读了ssh手册页和githubs文档。@AlexBollbach很乐意提供帮助。因为你不知道为什么会这样,我扩展了答案来更清楚地解释这一部分。