Max*_*Max 20 git ssh github public-key
可能是一个简单的问题,但我在这里不知所措......
在github中,可以为每个存储库添加部署密钥,该部署密钥仅提供对该单个存储库的访问.
但是对于一个客户端,我在同一台服务器上使用git管理了两个项目(项目A和项目B).如果我使用项目A的公钥,github告诉我,我不能将它用作项目B的部署密钥,反之亦然.
如何创建另一个公钥并设置git以使用项目A的一个键和项目B的另一个键?
Paŭ*_*ann 41
ssh这样做的方法是使用~/.ssh/config,创建一个主机名别名,并为两个项目访问具有不同主机名的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
Run Code Online (Sandbox Code Playgroud)
然后使用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-agent,你已经发现(或者你现在正在发现)~/.ssh/config一个文件,让你的 ssh 客户端知道根据主机名和用户名使用什么私钥,有一个简单的配置条目,如下所示这:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)
因此,您继续创建(alice_github.id_rsa, alice_github.id_rsa.pub)密钥对,然后还转到存储库的.git/config文件,并将遥控器的 url 修改origin为如下所示:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
Run Code Online (Sandbox Code Playgroud)
最后,您转到存储库Settings > Deploy keys部分并添加了以下内容alice_github.id_rsa.pub
此时,您git pull origin master无需输入密码即可完成操作,不会出现任何问题。
因此,您的本能反应是获取该密钥并将其添加到repo2的 Deploy 密钥中,但 github.com 会出错并告诉您该密钥已被使用。
现在你去生成另一个密钥(ssh-keygen -t rsa -C "alice@alice.com"当然不使用密码),这样就不会变得一团糟,你现在将像这样命名你的密钥:
repo1密钥对:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)repo2密钥对:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)现在,您将把新的公钥放在repo2github.com 上的部署密钥配置中,但现在您有一个 ssh 问题需要处理。
github.com?您的.ssh/config文件指向github.com,但它不知道在进行拉取时使用哪个键。
所以我在 github.com 上发现了一个技巧。您可以告诉您的 ssh 客户端每个存储库位于不同的 github.com 子域中,在这些情况下,它们将是repo1.github.com并且repo2.github.com
因此,第一件事是编辑.git/config存储库克隆上的文件,因此它们看起来像这样:
对于回购1
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Run Code Online (Sandbox Code Playgroud)
对于回购2
[远程“起源”] 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
Run Code Online (Sandbox Code Playgroud)
git pull origin master现在您无需输入两个存储库中的任何密码即可进行操作。
如果您有多台机器,您可以将密钥复制到每台机器并重复使用它们,但我建议您进行一些工作,为每台机器和存储库生成 1 个密钥。您将有更多的密钥需要处理,但如果其中一个密钥被泄露,您将更不容易受到攻击。
| 归档时间: |
|
| 查看次数: |
7020 次 |
| 最近记录: |