我知道这已经有 5 年以上的历史了,但是对于这个流行的问题没有公认的答案,所以这是我认为考虑到清洁度和未来可读性的最佳方法:
将部署用户添加到您的团队
第 1 步:在您组织的域中为新的部署用户创建一个新的电子邮件地址。类似deploy@organisation.example.com。
第 2 步:使用该邮箱创建一个新的 GitHub 帐户(GitHub 将这些称为“机器用户”)给它一个像deploy-ExampleOrganisation这样的用户名,这样它的角色就很清楚了。
第 3 步:使用如下命令在您的服务器上创建一个名为“deploy”的用户:
useradd -d /home/deploy -m deploy
为deploy@servername生成 SSH 密钥,不指定密码和/home/deploy/.ssh/id_rsa作为文件位置:
ssh-keygen -t rsa -b 4096 -C "deploy@servername"
在新的 deploy-ExampleOrganisation GitHub 帐户上添加/home/deploy/.ssh/id_rsa.pub的内容作为 SSH 密钥:转到Settings > SSH and GPG keys > New SSH Key。
第 4 步:在您的组织中创建一个名为“只读部署用户”之类的团队,将您的新用户添加到团队并授予团队对将部署的任何存储库的读取权限。(如果您没有组织帐户,您仍然可以授予该用户访问多个私有存储库的权限)
步骤 5:添加您自己的个人机器的 SSH 密钥以部署用户的授权密钥文件(/home/deploy/.ssh/authorized_keys),以便您(或您的部署脚本)在部署代码时可以作为部署登录。
繁荣!就是这样......您现在拥有一个干净且自我记录的流程。
PS 我尝试了 aculich 的高度评价的答案,但用假主机名弄乱了感觉很脏,我想,如果我在几年后回到这个问题,我会很容易弄清楚我做了什么来创建所有密钥并理解那个 SSH 配置文件如何使那些有趣的不存在的远程地址工作?可能不是!
部署用户相对于假主机名方法的优势:
- 没有黑客!它是具有明确名称的标准用户帐户,通过真实主机名访问存储库。
- 更少的键浮动。
- 如果/当您确实移动到其他服务器时,很容易为您的 Deploy 用户在所有这些服务器上提供一个帐户,只需向她的 GitHub 帐户添加 1 个新密钥,她在新服务器上的帐户就可以部署代码了。
- 部署用户只有低权限只读访问团队中列出的存储库,并且您的个人 SSH 密钥远离服务器,因此如果某些讨厌的人确实获得了对您服务器的访问权限,他们无法对您的所有存储库造成严重破坏也是。
- 部署工具配置文件(例如 Capistrano)不会弄脏包含那些令人困惑的假主机名。(当他们开始在服务器之外传播时,我真的对这种方法感到不舒服。)
- 如果你忘记了你在几年内是如何做到这一点的,文件所有权将引导你到部署用户
ls -la
,SSH 密钥将引导你到 GitHub 帐户名ssh -T git@github.com
,希望你能再次完全跟上速度。
- 最后……这是GitHub推荐的方法。