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

有没有一种简单的方法可以在同一个gitolite客户端上使用多个私有ssh密钥?,ssh,gitolite,Ssh,Gitolite,我有一台运行gitolite的机器,用于代码回购和Sparkeshare。问题是Sparkeshare创建了自己的密钥对;该密钥对首先进行身份验证,并且对代码repos没有权限,因此gitolite终止,而不尝试任何其他密钥对 我想我可能需要弄清楚如何告诉Sparkeshare使用我的原始密钥,或者编写一个别名来强制gitolite使用正确的私钥——我甚至不确定这是可能的。从未使用过,我不太确定它的要求,但我阅读了一些文档,试图了解它是如何与Git交互的。它看起来是为了通过Git存储库发布和拉取

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

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

从未使用过,我不太确定它的要求,但我阅读了一些文档,试图了解它是如何与Git交互的。它看起来是为了通过Git存储库发布和拉取数据而设计的(它描述了使用“您自己的服务器”、Github和Gitorious进行数据存储/传输/同步/任何操作)

在下文中,我假设您希望通过相同的Gitolite安装为您的Sparkeshare存储库和其他非Sparkeshare存储库提供服务(以便您可以使用Gitolite控制对这两种存储库的访问)

在我看来,如果您遵循Gitolite的访问规则,而不是SparkShare的“使用您自己的服务器”文档中描述的通用“Git over SSH”,那么使用Gitolite托管的存储库可能会很好

特别是,不要使用
ssh copy id
cat-keyfile>.ssh/authorized_-keys
将公钥安装到Gitolite用户的
.ssh/authorized_-keys
中。这有效地为这些公钥的所有者提供了对Gitolite安装的“管理访问权”(例如,完全删除Gitolite安装和该帐户下存储的任何其他内容的能力)。相反,您应该授予SparkShare新用户访问Gitolite托管存储库的权限(在
Gitolite_admin
clone中进行并推送更改:将用户的公钥放入
keydir/newusername.pub
,并将
newusername
添加到
conf/Gitolite.conf
中存储库的访问列表中)。如果你认为这是一条路,你甚至可以拥有


如果您发现在同一帐户的
.ssh/authorized\u keys
中,您绝对必须仍有同时具有“完全访问”密钥(无
command=
)和Gitolite托管密钥(具有
command=
的密钥,通过Gitolite管理库中的
keydir/
进行管理)的用户,然后您可能会发现,您可以通过
identiesonly
参数强制ssh客户端只提供某些指定的密钥(请参阅)

假设您可以通过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
在Sparkeshare中,将“我自己的服务器”设置为
Sparkeshare
(或
git@sparkleshare
如果需要用户部件)并将“文件夹名称”设置为
我们的Sparkeshare.git
(无论存储库的“Gitolite路径”是什么,而不是“完整服务器站点路径”因为访问将通过Gitolite进行,它需要相对于其REPO_基设置的路径)


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

如果有足够代表的人认为合适,最好添加Sparkeshare标记=)您是否尝试将公共SSH密钥添加到相关的
$HOME/.SSH/authorized_keys
文件中,与您正在使用的另一个密钥遵循相同的模式?该密钥在那里——只要另一个不在那里,它就可以工作。这两个密钥应该能够在
授权的\u密钥
文件中共存。检查你的语法?我真的很感激你在这方面付出的努力,但它没有解决我的任何问题。我知道如何运行Sparkeshare,我已经让gitolite运行了很长时间。问题是有两个客户端ssh密钥,并根据我联系gitolite服务器的时间/原因在它们之间进行选择。您是否只尝试了
标识
(尽管我在最初的帖子中无意中遗漏了示例中的值)?它完全符合您的要求:允许您指定客户端将向服务器提供的密钥。另外,由于可能没有很多人同时了解Sparkeshare和Gitolite,如果您能更好地描述您的设置以及每个工具如何为那些只熟悉其中一个工具的人工作的细节,那会有所帮助。这就是问题所在--因此我需要在我的主机文件中设置一个别名,然后将我的主机名作为密钥使用。太好了,谢谢!