2

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

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

4

1 回答 1

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 安装和存储在该帐户下的任何其他内容)。相反,您应该通过 Gitolite 添加用户以授予新 SparkeShare 用户访问 Gitolite 托管存储库的权限(在您的gitolite_admin克隆中进行并推送更改:将用户的公钥放入keydir/newusername.pub并添加newusername到存储库的访问列表中conf/gitolite.conf)。如果您认为这是可行的方法,您甚至可以将多个 SSH 密钥与单个 Gitolite 用户关联。


如果您发现您绝对必须在同一个帐户中同时拥有具有“完全访问”密钥(否command=)和 Gitolite 管理的密钥(带有 的密钥command=,通过keydir/Gitolite 管理存储库中管理的密钥)的用户.ssh/authorized_keys,那么您可能会发现您可以强制ssh客户端通过IdentitiesOnly参数仅提供某些指定的密钥(请参阅ssh_config(5))。

假设您可以通过 Git URL 访问 Gitolite git@server.example.com:projectA.git,然后像这样配置每个客户端:

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 中,将“我自己的服务器”设置为sparkleshare(或者git@sparkleshare如果它需要用户部分)并将“文件夹名称”设置为our-sparkleshare.git(无论存储库的“Gitolite 路径”是什么,而不是“完整的服务器站点路径”,因为访问将通过 Gitolite 并且它期望相对于其 REPO_BASE 设置的路径)。

对于非 SparkleShare 访问,请使用 Git URL,例如gitolite:projectA.git

于 2011-08-10T03:33:51.237 回答