Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/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_Ssh - Fatal编程技术网

如何从两台机器访问一个Git回购?

如何从两台机器访问一个Git回购?,git,ssh,Git,Ssh,我有一个工作回购,通常从我的工作机器访问。在这台机器上,我使用Git Bash中的SSH-keygen创建了一个SSH密钥对。这两台机器上的密钥对都是id\u rsa和id\u rsa.pub 如果我以我的工作用户身份登录,并尝试将我的主密钥添加到工作用户帐户,我会被告知其他人已经注册了该密钥。如果生成第二个主密钥,即id\u rsa2和id\u rsa.pub2,则身份验证失败 由此,我推测Git在默认情况下,在与repo主机(顺便说一句,它是BitBucket)进行身份验证时,只查找并使用原

我有一个工作回购,通常从我的工作机器访问。在这台机器上,我使用Git Bash中的
SSH-keygen
创建了一个SSH密钥对。这两台机器上的密钥对都是
id\u rsa
id\u rsa.pub

如果我以我的工作用户身份登录,并尝试将我的主密钥添加到工作用户帐户,我会被告知其他人已经注册了该密钥。如果生成第二个主密钥,即
id\u rsa2
id\u rsa.pub2
,则身份验证失败


由此,我推测Git在默认情况下,在与repo主机(顺便说一句,它是BitBucket)进行身份验证时,只查找并使用原始的
id\u rsa.pub
文件。我猜我不得不告诉Git使用哪个密钥来进行哪个repo,或者别的什么,但是现在我不知道该怎么做了。

您可以使用一个
~/.ssh/config
文件使用多个私有ssh密钥

Host fromhome
  HostName yourServer
  User git
  IdentityFile "~/.ssh/id_rsa2"

Host fromwork
  HostName yourServer 
  User git
  IdentityFile "~/.ssh/id_rsa"
该文件可以引用两个私钥,并允许您使用2个不同的ssh URL

在家:

cd /path/to/local/repo
git remote set-url origin fromhome:<user>/yourrepo
cd/path/to/local/repo
git远程设置url来源于主页:/yourrepo
下班:

cd /path/to/local/repo
git remote set-url origin fromwork:<user>/yourrepo
cd/path/to/local/repo
git远程设置url来源于工作:/yourrepo
也就是说,无论是在家还是在工作中,您只需要一组公钥/私钥,因此不需要配置文件。
如果您在家中重新生成私钥
id\u rsa
私钥,您将能够在BitBucket端注册它的新公钥。
在家里,
.ssh/config
仅在您已经有用于其他用途的私有/公共ssh密钥时才有用

询问:

为什么我不能将
.ssh
目录复制到第二台机器上并使用相同的目录

这被认为是不好的做法:私钥应该保留。。。私密的,如“不随意复制”。
此外,您还可以轻松地撤销私钥(通过从
.authorized_keys
ssh服务器中删除其授权密钥)。如果在许多机器上使用私钥,那么通过删除服务器端的一个公钥,您将以超出预期的方式撤销访问权