Git 不能推送至远程回购-“;请确保您拥有正确的访问权限,并且存储库存在。”;
由于在推动我的私人项目和工作项目之间进行转换,我经常面临身份验证问题。每次我从工作环境转移到个人环境时,我都会花一些时间处理ssh密钥和配置。我经常阅读github文档,了解如何生成ssh公钥并将其添加到站点 今天,我得到: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
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 urlX
,我想克隆一下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很乐意提供帮助。因为你不知道为什么会这样,我扩展了答案来更清楚地解释这一部分。