如何在每个git存储库中只管理一个密钥?
我在两种情况下使用git:如何在每个git存储库中只管理一个密钥?,git,github,ssh,Git,Github,Ssh,我在两种情况下使用git: 我使用一些Github存储库 我目前正在使用OpenShift,它使用ssh和git进行部署 首先,我使用ssh-keygen生成一个密钥,该密钥在OpenShift站点更新。该密钥存储在~/.ssh/并创建id\u rsa和id\u rsa.pub 然后我开始从Github克隆一个存储库,有一次我再次执行了ssh-keygen,并开始推送,它工作正常。然后我克隆了另一个存储库并开始出现问题: 我在克隆到第二个存储库时遇到问题。每次我尝试推动时,都会显示以下内容:
- 我使用一些Github存储库
- 我目前正在使用OpenShift,它使用ssh和git进行部署
ssh-keygen
生成一个密钥,该密钥在OpenShift站点更新。该密钥存储在~/.ssh/
并创建id\u rsa
和id\u rsa.pub
然后我开始从Github克隆一个存储库,有一次我再次执行了ssh-keygen
,并开始推送,它工作正常。然后我克隆了另一个存储库并开始出现问题:
我在克隆到第二个存储库时遇到问题。每次我尝试推动时,都会显示以下内容:
错误:拒绝DiegoaGuillar/cursoJava.git对DiegoaGuillar/cursocannibal的权限。
致命:远程端意外挂起
但是可以看出,diegoaguilar/cursocannibalbiotes
是不正确的,因为它是另一个存储库
我甚至尝试删除这样的存储库目录,并再次克隆它,同样的情况也发生了
我已经进入了~/.ssh
:
配置
:
Host cursoJava
Hostname github.com
User git
IdentityFile ~/.ssh/id_java
Host cursoCannibalCreatures
Hostname github.com
User git
IdentityFile ~/.ssh/id_cannibal
Host openshift
Hostname openshift.com
User git
IdentityFile ~/.ssh/openshift
因此:
id_cannibal id_cannibal.pub id_java id_java.pub known_hosts
像id\u openshift
和id\u openshift.pub
之类的东西不在那里,但由于它不起作用,我现在不太在乎
我创建了这样的文件,它们是.pub
通过ssh-keygen-f
创建的,并为每个文件提供了不同的密码短语。我在每个Github存储库设置中添加了.pub
的内容作为部署键
我做错了什么?这是怎么回事?而且,当在另一台机器上工作时,如何正确地获得这些钥匙,证明是我,并透明地工作
编辑
git remote-v的输出
- 对于cursoJava存储库
原点git@github.com:diegoaguilar/cursoJava.git(fetch)
起源git@github.com:diegoaguilar/cursoJava.git(推送)
- 对于草类动物
原点git@github.com:diegoaguilar/cursocannibalbiotes.git(获取)
起源git@github.com:diegoaguilar/cursocannibalbiotes.git(push)
如“”中所述,诀窍是不要将默认的id\u rsa(.pub)名称用于public:private密钥(因为您只能定义其中的一对),而是使用不同的名称
但只有当你以不同的用户身份访问这些回购协议时,才能这样做
在您的情况下,您使用相同的用户访问repo,一个ssh密钥就足够了
见“”:
此错误意味着您要推送的密钥作为部署密钥附加到另一个存储库,并且无法访问您尝试推送到的存储库
要解决此问题,请从存储库中删除部署密钥,然后
这是为两个不同的用户使用GitHub
然后定义一个~/.ssh/config
文件,在该文件中,您通过其完整路径引用每个私钥:
Host github1
HostName github.com
User git
IdentityFile ~/.ssh/id_repo1
Host github2
HostName github.com
User git
IdentityFile ~/.ssh/id_repo2
而不是使用git@gihub.com:user/repo1
,您将使用:
github1:user/repo1
它使用密钥Host
条目“github1
”引用用户(git
)、主机名(github.com
)以及要使用的确切私钥/公钥
因此,如果您有第二个repo,它使用存储为~/.ssh/id\u repo2(.pub)
的第二个密钥,那么您需要使用上面定义的条目“github2
”(您可以根据需要命名),然后更改您的源url:
git remote set-url origin github2:user/repo2
这样,git push
将使用正确的键(用于repo2
)
如果您不这样做,您将能够推送一个repo(使用默认密钥~/.ssh/id\u rsa(.pub)
,默认名称),但您将无法推送到第二个repo,这需要一组不同的公钥/私钥。它在我得到的另一个github文件夹中成功,但在我遇到问题的那个文件夹上没有。当我尝试git push
时,我得到了相同的错误在这种情况下,两个存储库都是同一个用户,这将如何更改配置文件,因此git remote
命令?@diegoaguilar我没有意识到这是针对两种情况下的同一用户的。我已经编辑了我的答案。@Noitidart是的,您可以将GIT\u SSH\u命令设置为SSH-v
。然后再次尝试您的git克隆。您将有一些日志要签出。@Noitidart您可以通过配置执行相同的调试:您的公共ssh密钥是否在Github repo管理页面中正确注册了正确的Github repo?是的,我仔细检查了。我添加了我尝试过的所有内容,@VonC你能复制一个git remote-v
,和git branch-avvv
,以及你正在键入的确切git push命令,以及它的确切输出吗?好的,请稍等几分钟,@VonC我想这意味着它是可以的,或者应该是。。。我现在试着推。。。