我最近阅读了大量有关 gitosis 的文档,但承认我对 ssh 密钥还不熟悉,而且我似乎只对 gitosis 如何与 git 配合使用来提供访问控制有一个基本的了解。
但实际上,我的研究已经持续了太长时间,我觉得我无法理解 Gitosis 中的这一点。那就是:
1) 我应该在 Debian 服务器上的哪里安装 Gitosis?在 /home/git/ 中?还是在 /usr/bin/ 中?在 /var/www 下的存储库中?我读过的有关安装主题的各种博客文章中似乎都没有提到这一点。然而,这似乎是个合理的问题。
2) 有些博客说要使用公钥,有些则提到私钥。有些似乎说不管他们想让你使用什么密钥,都不要设置密码。还有一些人说,如果将密码字段留空,一切都会变得不安全。这让我完全糊涂了。
3) 我想要做的就是让我自己和另外两名开发人员能够访问开发服务器,这样他们就可以将代码从一个目录(比如说他们自己的沙箱)推送到同一台服务器上的 www/html dev 目录(用于发布到内部测试)。然后我想在测试完代码后将代码从那里推送到另一台服务器。设置真的这么难吗?我应该将 git 和 gitosis 添加到实时服务器吗?
我使用了下面列出的这个页面以及其他页面作为参考,并且理解了其中的大部分内容。只是不明白我上面询问的部分。谢谢。
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
答案1
1:就安装 gitosis 而言,你可以将其“源”提取到你喜欢的任何目录中。setup.py 脚本有默认位置,它将用于安装所有内容。Debian 的 gitosis 包将安装文件此处列出.至于你的代码,gitosis 管理“git”用户主目录中的存储库。从那里,您需要为实际网站提取工作副本。有一个页面这里关于使用 git 管理网站,这里有一些自动化的想法,尽管您需要付出更多的努力来处理暂存与生产问题。另请参阅 #3。
2:SSH 使用公钥/私钥对。用户始终对私钥保密,然后将公钥提供给用户想要登录的任何服务器(因此,如果有人“窃取”公钥,他们所能做的最好的事情就是让用户登录到他们的服务器)。您链接的教程中给出的 gitosis-init 命令获取密钥的公钥部分并将其添加到您创建的“git”用户的 SSH 授权密钥列表中,并使用特殊设置强制任何使用私钥部分登录的人只能使用 gitosis。
3:您必须根据您的访问控制来决定这一点。如果您的团队在生产服务器上有 shell 访问权限,那么最简单的做法就是将git pull
所有更新从 gitolite 转移到生产服务器。如果您没有 shell 访问权限,那么您需要设置某种服务来推送网站到生产服务器,使用 rsync 或 scp 或类似的东西可能是最简单的。
SSH 如何使 Gitosis 工作
ssh 有几个关键部分使得 gitosis 可以正常工作:
第一部分是公钥/私钥系统,它允许用户使用密钥而不是账户密码登录。这使得多个人都可以使用同一个 ssh 用户名(“git”)登录。
下一部分是authorized_keys
文件。所有允许登录此“git”帐户的公钥都存储在此文件中。连接时,您和服务器将根据密钥交换信息(实际上不会传输密钥本身),以证明您的私钥与其中一个授权公钥匹配。为了让您的客户端执行此操作,如果您在密钥上设置了密码(实际上加密了密钥本身),则需要将密码提供给客户端。
gitosis 的“魔力”在于,authorized_keys
可以配置文件以强制特定密钥运行特定命令。gitosis-init
除了设置 gitosis 自己的“特殊”配置存储库之外,它还会获取给定的公钥,并使用命令将其添加到 authorized_keys 文件中,该命令强制程序识别密钥的实际所有者并将远程 git 程序连接到本地 git 存储库(此命令为gitosis-serve username
)。请注意,gitosis-init
应该只使用一次,之后所有更改都通过配置存储库进行:您将其他开发人员的公钥(他们应该自己生成,将私钥保密并只向您提供公钥)添加到该存储库并将配置推送回服务器。authorized_keys
完成此操作后,gitosis 将自动添加包含其用户信息的行。