Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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/linux/22.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,我在两种情况下使用git: 我使用一些Github存储库 我目前正在使用OpenShift,它使用ssh和git进行部署 首先,我使用ssh-keygen生成一个密钥,该密钥在OpenShift站点更新。该密钥存储在~/.ssh/并创建id\u rsa和id\u rsa.pub 然后我开始从Github克隆一个存储库,有一次我再次执行了ssh-keygen,并开始推送,它工作正常。然后我克隆了另一个存储库并开始出现问题: 我在克隆到第二个存储库时遇到问题。每次我尝试推动时,都会显示以下内容:

我在两种情况下使用git:

  • 我使用一些Github存储库
  • 我目前正在使用OpenShift,它使用sshgit进行部署
首先,我使用
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我想这意味着它是可以的,或者应该是。。。我现在试着推。。。