有没有一种简单的方法可以在同一个gitolite客户端上使用多个私有ssh密钥?

时间:2011-08-10 02:01:16

标签: ssh gitolite

我有一台运行gitolite的机器,用于代码回购和Sparkleshare。问题是Sparkleshare创建了自己的密钥对;该密钥对首先进行身份验证,并且对代码回购没有任何权限,因此gitolite终止而不尝试任何其他对。

我想我可能需要弄清楚如何告诉Sparkleshare使用我的原始密钥,或者写一个强制gitolite使用正确私钥的别名 - 我甚至不确定是否可能。

1 个答案:

答案 0 :(得分:3)

从未使用SparkleShare,我不太确定它的要求,但我阅读了一些文档,试图了解它与Git的交互方式。它看起来像是通过Git存储库发布和提取数据(它描述了使用“你自己的服务器”,Github和Gitorious用于数据存储/传输/同步/无论如何)。

在下面我假设你想通过相同的Gitolite安装服务你的SparkleShare存储库和其他非SparkleShare存储库(这样你就可以使用Gitolite来控制对这两种存储库的访问)。

在我看来,如果您遵循Gitolite提供访问权限的规则,而不是SparkeShare的“使用您自己的服务器”文档中描述的通用“Git over SSH”,它可能会与Gitolite托管的存储库一起使用。

特别是,请勿使用ssh-copy-idcat keyfile >> .ssh/authorized_keys将公钥安装到Gitolite用户的.ssh/authorized_keys中。这有效地为这些公钥的所有者提供了对Gitolite安装的“管理访问”(例如,能够完全删除Gitolite安装以及该帐户下存储的任何其他内容)。相反,您应该add users through Gitolite授予新的SparkeShare用户访问Gitolite托管的存储库的权限(在gitolite_admin克隆中制作和推送更改:将用户的公钥放入keydir/newusername.pub并添加{{ 1}}到newusername中的存储库访问列表。如果您认为这是可行的方法,您甚至可以multiple SSH keys associated with a single Gitolite user


如果您发现绝对必须让用户同时拥有“完全访问”密钥(无conf/gitolite.conf)和Gitolite管理密钥(密钥为command=,则通过command=进行管理同一帐户keydir/中的Gitolite管理存储库),您可能会发现可以强制 ssh 客户端通过.ssh/authorized_keys参数仅提供某些指定的密钥(请参阅{{ 3}})。

假设您可以通过Git URL(例如IdentitiesOnly)访问Gitolite,然后像这样配置每个客户端:

git@server.example.com:projectA.git

在SparkleShare中,将“我自己的服务器”设置为Host sparkleshare User git HostName server.example.com IdentityFile ~/sparkelshare/pub_key IdentitiesOnly yes Host gitolite User git HostName server.example.com IdentityFile ~/.ssh/id_rsa # or the user's normal, non-SparkleShare key IdentitiesOnly yes (或sparkleshare,如果它需要用户部分)并将“文件夹名称”设置为git@sparkleshare(无论“Gitolite”路径“到存储库是,而不是”完整的服务器站点路径“,因为访问将通过Gitolite并且它期望路径相对于其REPO_BASE设置。)

对于非SparkleShare访问,请使用our-sparkleshare.git

等Git网址