github部署密钥:我如何为单台机器授权多个存储库

问题描述:

所以,我有一台主机,称之为rob。我在rob上使用了ssh-keygen来获取一个公钥,我给github添加了一个新的部署密钥屏幕,用于存储库cheech。现在我想在rob上部署chong。但是,如果我在github上为存储库chong添加新的部署密钥屏幕,并粘贴我在rob上生成的公钥,那么它会显示key already in use。我想,如果他们的钥匙在使用中,我可以在rob上克隆chong,但那说明权限被拒绝。github部署密钥:我如何为单台机器授权多个存储库

很明显,这比我想象的更复杂,它涉及到有多个键或其他东西。我应该如何克隆chongrob

谢谢你的帮助。

github的部署密钥是唯一的...您必须为其他存储库生成一个新密钥。只是运行ssh-凯基再次

请参阅此GitHub的文档:https://help.github.com/articles/managing-deploy-keys

如果你舒适让rob访问所有在您的帐户GitHub的私有库,你可以删除密钥作为部署的关键从cheech,然后将其作为SSH密钥添加到您的GitHub帐户作为一个整体。这会给rob访问cheechchong

如果您的帐户中有其他存储库,并且您不希望rob可以访问,则这不起作用。

如果您需要更细致的控制,您需要在rob上生成其他密钥,并将它们作为部署密钥分配给特定存储库。

一旦某个密钥作为部署密钥附加到一个回购协议,它就不能在另一个回购协议中使用 。如果你遇到了此问题而设置 了部署键,那么你就需要修改您的遥控器和设置您的 ~/.ssh/config文件使用不存在 github.com主机名 SSH就能用于为您的 存储库选择正确的ssh部署密钥。

# first we remove the origin 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 
$ git remote rm origin 

# here we add a new origin using a host nickname called 
# foo.github.com that we will reference with a Host stanza in our 
# ~/.ssh/config to specify which key to use with which fake hostname. 
$ git remote add origin [email protected]:username/foo.git 
$ git remote -v 
origin [email protected]:username/foo.git (fetch) 
origin [email protected]:username/foo.git (push) 

生成您的存储库中的部署重点,并将其命名它的东西 合理,如:

$ ssh-keygen -t rsa -f ~/.ssh/id_rsa-foo -C https://github.com/username/foo 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa-foo. 
Your public key has been saved in /home/username/.ssh/id_rsa-foo.pub. 
The key fingerprint is: 
c0:ff:ee:34:24:11:5e:6d:7c:4c:b1:a0:de:ad:be:ef https://github.com/username/foo 
The key's randomart image is: 
+--[ RSA 2048]----+ 
| E o..o.oo. | 
| M o o o .+CoW | 
| + o = o. .. | 
| . . +   | 
|  S  | 
|  o .  | 
|  +  | 
|  . o  | 
|  ..o.  | 
+-----------------+ 

一旦你 added the deploy key 然后你会需要以下节添加到您的~/.ssh/config文件:

Host fake-hostname-foo.github.com 
    Hostname github.com 
    IdentityFile ~/.ssh/id_rsa-foo 

现在你可以用它来测试它:

$ ssh -T [email protected] 
Hi username! You've successfully authenticated, but GitHub 
does not provide shell access. 
+2

很好的答案,非常有帮助。工作完美。谢谢 – 2012-12-18 20:31:37

+1

我不明白什么是假的?您生成另一个密钥。每一秒都被称为“假”吗? – 2016-07-12 20:45:46

+0

@LittleAlien'foo.github.com'中的'foo'主机名是假的(也就是不存在的)部分。你可以为主机名填补任何你想要的东西。我已经用'fake-hostname-foo.github.com'来澄清这个条目,而不是'foo.github.com'。 – aculich 2016-07-14 01:02:11

我找到的最简单的解决方案是概述here

1),输入以下命令(你会为你必须然而,许多键)做到这一点:

SSH-凯基-t RSA -C “[email protected]

2)当提示下面的语句键入一个唯一的名称(即,foo1_rsa)时,将在当前目录中创建该文件,如果要整理,可能需要将其移至.ssh:

输入要保存的文件关键(/Users/you/.ssh/id_rsa):按回车键]

3)更新您的SSH配置文件:

VI的〜/ .ssh/config中

可能为空:

Host cheech github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo1_rsa 

Host chong github.com 
Hostname github.com 
IdentityFile ~/.ssh/foo2_rsa 

您还可以创建一个SSH包装并把它作为GIT_SSH。这个选项的好处是你不必改变git remote。 https://*.com/a/14221028/3461

使用我的小型npm模块github-add-key可以轻松管理多个GitHub部署密钥。它使用this伟大的答案描述的方法,和所有你需要的是

$ github上加键抢/冲

在你的本地克隆 rob/chong

,并按照简单的自动化过程。

虽然Pimkin的想法是伟大的,我不想安装node只是这一点,所以我创建类似于bash东西:

https://gist.github.com/blvz/8eeebacae11011c25fc79eff12f49ae9

安装和使用:

curl https://gist.githubusercontent.com/blvz/8eeebacae11011c25fc79eff12f49ae9/raw/6f2f7f3709a0fe852d8a3a5bb125325e3ffbc7d8/gh-deploy-clone.sh > /usr/local/bin/gh-deploy-clone 
chmod +x /usr/local/bin/gh-deploy-clone 

gh-deploy-clone user/repo 

# You can also give it a name, in case 
# you have multiple deploy targets: 

gh-deploy-clone user/repo staging 

我知道这是5岁以上,但没有公认的答案这个受欢迎的问题,所以这里是我认为考虑清洁度和未来可读性的最佳方式:


ADD A部署用户给你的团队

第1步:创建您的组织的域新新的电子邮件地址部署用户。类似于[email protected]

第2步:使用该邮箱来创建一个新帐户GitHub的(GitHub calls these "machine users")给它一个用户名像部署,ExampleOrganisation所以它的作用是显而易见的。

步骤3:在您的服务器名为上的用户“部署”用这样的命令:

useradd -d /home/deploy -m deploy 

产生部署@服务器 SSH密钥,指定没有密码和/home/deploy/.ssh/id_rsa作为文件位置:

ssh-keygen -t rsa -b 4096 -C "[email protected]" 

添加的小故事nts /home/deploy/.ssh/id_rsa.pub作为您的新的SSH密钥部署 - 示例组织 GitHub帐户:转至设置> SSH和GPG密钥>新SSH密钥

第4步:创建组织中的一队叫像“只读部署用户”,您的新用户添加到团队和给球队读访问将被部署在任何回购协议。 (如果你没有一个组织帐户,您仍然可以授予该用户对多个专用回购接入)

第5步:添加您自己的个人计算机的SSH密钥部署用户的授权密钥文件(/家/deploy/.ssh/authorized_keys),以便部署代码时您(或您的部署脚本)可以登录为部署

热潮!就是这样...你现在有一个干净的自我记录流程。


P.S.我尝试了一下aculich的高票,但是它觉得肮脏与假主机名乱搞,我想,如果我在几年后回来,我会很容易找出我做了什么来创建所有的关键,并了解如何该SSH配置文件使这些有趣的不存在的远程地址工作?可能不会!一个部署用户的

优势,较假主机名的方法:

  • 没有黑客!它是具有明确名称的标准用户帐户,通过真实的主机名访问回购站。
  • 少了几个键。
  • 如果/当您确实迁移到其他服务器时,很容易为您的Deploy用户提供所有帐户的帐户,只需向其GitHub帐户添加一个新密钥,她在新服务器上的帐户就可以部署代码。
  • 部署用户只具有低权限仅对组中列出的Repos进行只读访问,并且您的个人SSH密钥将保留在服务器外部,因此如果某位讨厌的人无法访问服务器,他们无法对其进行破坏所有的回购也是如此。
  • 部署工具配置文件(例如Capistrano)不会弄脏包含那些令人困惑的虚拟主机名称。 (这是当他们开始传播到服务器之外,我真的变得不习惯这种方法)。
  • 如果你忘记了你在多年的时间里做了这些事情,文件的所有权将导致你部署用户ls -la, SSH密钥会引导您使用GitHub账户名ssh -T [email protected],希望您能够再次加速。
  • 最后...这是由GitHub推荐的方法。