这可能是一个简单的问题,但我很困惑...
Github上每个存储库都可以添加部署密钥,该密钥仅授予对该存储库的访问权限。
但是,我有一个客户,在同一服务器上管理两个使用git的项目(项目A和项目B)。如果我使用项目A的公钥,则github告诉我无法将其用作项目B的部署密钥,反之亦然。
如何创建另一个公钥,并设置git使用一个密钥来处理项目A,使用另一个密钥来处理项目B?
这可能是一个简单的问题,但我很困惑...
Github上每个存储库都可以添加部署密钥,该密钥仅授予对该存储库的访问权限。
但是,我有一个客户,在同一服务器上管理两个使用git的项目(项目A和项目B)。如果我使用项目A的公钥,则github告诉我无法将其用作项目B的部署密钥,反之亦然。
如何创建另一个公钥,并设置git使用一个密钥来处理项目A,使用另一个密钥来处理项目B?
使用~/.ssh/config
的ssh
方法,创建主机名别名并使用不同的主机名访问github以处理两个项目。我不知道是否也有git config
(或git remote
)的方法。
Host a.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-a-id_rsa
Host b.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-b-id_rsa
然后使用a.github.com:user/project-a.git
或b.github.com:user/project-b.git
(或类似的)作为您的存储库URL。
alice
是一个github.com用户,拥有2个或多个私人存储库repoN
。在本例中,我们只使用名为repo1
和repo2
的两个存储库。
https://github.com/alice/repo1
https://github.com/alice/repo2
您需要从这些存储库中拉取内容,而不需要在服务器上或多个服务器上输入密码。例如,您想要执行git pull origin master
,并且希望它在不要求输入密码的情况下完成。~/.ssh/config
的信息,这是一个文件,根据主机名和用户名通知您的ssh客户端使用哪个私钥,其配置条目如下所示:Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
所以你已经创建了你的 (alice_github.id_rsa, alice_github.id_rsa.pub)
密钥对,然后你还去修改了你的仓库的 .git/config
文件,并将你的远程 origin
的url修改为类似这样的内容:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
对于repo2
[remote "origin"] url = "ssh://git@repo2.github.com/alice/repo2.git"
然后,在你的.ssh/config
文件中,现在你可以为每个子域名输入一个配置 :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
现在,您可以从两个仓库中都不需要输入任何密码来执行git pull origin master
操作。
如果您有多台机器,可以将密钥复制到每台机器上并重复使用它们,但我建议为每台机器和存储库生成1个密钥。这样,您将有更多的密钥要处理,但如果一个密钥被攻破,您就不那么容易受到影响了。