我有一台运行gitolite的机器,用于代码回购和Sparkleshare。问题是Sparkleshare创建了自己的密钥对;该密钥对首先进行身份验证,并且对代码回购没有任何权限,因此gitolite终止而不尝试任何其他对。
我想我可能需要弄清楚如何告诉Sparkleshare使用我的原始密钥,或者写一个强制gitolite使用正确私钥的别名 - 我甚至不确定是否可能。
答案 0 :(得分:3)
从未使用SparkleShare,我不太确定它的要求,但我阅读了一些文档,试图了解它与Git的交互方式。它看起来像是通过Git存储库发布和提取数据(它描述了使用“你自己的服务器”,Github和Gitorious用于数据存储/传输/同步/无论如何)。
在下面我假设你想通过相同的Gitolite安装服务你的SparkleShare存储库和其他非SparkleShare存储库(这样你就可以使用Gitolite来控制对这两种存储库的访问)。
在我看来,如果您遵循Gitolite提供访问权限的规则,而不是SparkeShare的“使用您自己的服务器”文档中描述的通用“Git over SSH”,它可能会与Gitolite托管的存储库一起使用。
特别是,请勿使用ssh-copy-id
或cat 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