【问题标题】:Git authentication - pull as a new userGit 身份验证 - 以新用户身份拉取
【发布时间】:2011-08-13 18:56:08
【问题描述】:

以下命令集正常工作

$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin gitosis@myserver.net:repositories/carboncake.git 
$ git pull

但是当我尝试以不同的用户拉取时,

$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin mithun@myserver.net:repositories/carboncake.git 
$ git pull

我收到以下错误

fatal: 'repositories/carboncake.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我的gitosis.conf 包含

[gitosis]

[group team]
writable = sweepshots
members = git_id_rsa

[group gitosis-admin]
writable = gitosis-admin
members = git_id_rsa


[repo carboncake]
description = A brand new app by Mithun.
owner = Mithun P

[group carboncake]
writable = carboncake
members = mithun @core

并且keydir 包含 git_id_rsa.pub KEY-----.pub mithun.pub mithun-rsa-key-20110427.pub

并且用户的.ssh 目录包含

mithun@testserver:~$ ls .ssh/
id_rsa  id_rsa.pub  mithun_rsa  mithun_rsa.pub

-- 更新

我也试过$ git remote add origin mithun@myserver.net:carboncake.git,但同样的错误。

其实carboncake.git位于/srv/gitosis/repositories/carboncake.git

【问题讨论】:

  • 这很正常:正如我的回答中所解释的那样,您通过尝试使用 mithun 用户的 ssh 来绕过 gitosis。您需要始终使用 gitosis 用户,但是由于 git 在他的$HOME/.ssh/id_rsa.pub 中获取了他的公钥,因此会检测到该用户。
  • 这就是以 gitosis 的不同用户身份克隆/获取/推送 repo 所需的:您的 HOME 更改,以及发送到 gitosis 的公钥更改。但是用于 ssh 会话的帐户保持不变。

标签: git git-pull


【解决方案1】:

为@VonC 的(完全正确)答案添加一点简单的英语清晰度...

gitosis(它不再处于积极开发中,您应该使用 gitolite,但此答案适用于他们两个)将每个用户的公钥存储在(在您的情况下)~gitosis/.ssh/authorized_keys。当用户 ssh'es 到帐户 gitosis 时,ssh 会进行加密握手,在该 authorized_keys 文件中找到与提供的密钥匹配的行,然后执行该行所说的任何操作。如果您查看该 authorized_keys 文件,每一行都提供了一个在该用户登录时调用的命令,这是对 gitosis 进程的调用,带有相关用户的名称。

所以每个用户都在 ssh'ing 到相同的gitosis“机器”帐户,但是他们在那里 SSH 的密钥会以他们的用户身份启动 gitosis。这就是 gitosis 知道它正在与哪个用户交谈的方式,即使他们已经登录到名为 gitosis 的同一个“机器”帐户。

因此,您需要为每个要跟踪到 gitosis 的本地 repo 提供一个格式为 gitosis@your.server:<reponame>.git 的遥控器。

【讨论】:

  • +1。像 gitolite 的 Gitosis 基于 ** ssh forced command mechanism (see link) ** 以便:a/ 通过公钥验证远程用户,b/ 始终调用 gitosis 脚本进行授权,拒绝用户使用交互式 ssh 会话作为 ' gitosis',并充分保护存储库(特别是如果 gitosis 帐户的 homedir 在 700 中!)。
【解决方案2】:

mithun@myserver.net?

通过使用mithun@myserver.net,您完全绕过了 gitosis,因为正确的 url 将涉及已安装 gitolite 的“git”用户。
每个 gitosis 命令都将涉及相同的“git”用户:gitosis@myserver.net(假设这里有一个“gitosis”帐户)。

另外,您不必指定 repo 的完整路径:

 git remote add origin gitosis@myserver.net:carboncake.git

【讨论】:

  • 不能以其他用户身份签出吗?但是为什么gitosis.conf文件中有组和成员呢?
  • @Mithun:绝对有可能,您只需要以具有 $HOME/.ssh/id_rsa.pub 特定于该用户的公共 ssh 密钥的用户身份登录,所述公共密钥发布于gitosis 回购。 Gitosis 然后会将 ssh 请求的远程用户识别为所述不同的用户。但是 ssh 请求本身是总是作为“gitosis”帐户完成的。除非你想完全绕过 gitosis。只有 gitosis 帐户包含 ssh/authorized_keys 文件,其中包含所有用户的公钥(以及调用 gitosis 脚本的强制命令)。
  • @Mithun:参见 gitosis README:eagain.net/gitweb/…:“目前,gitosis 使用 HOME 环境变量来定位写入文件的位置。如果您使用 sudo -u 而没有 @987654331 @, sudo 将保留 HOME 的旧值,这将导致麻烦。稍后会有解决方法,但现在,如果您要使用 -H,请始终记住使用帐户。
  • 请注意,您可以在$HOME/.ssh/config 中指定另一个公钥,这样一个用户就可以使用两个不同的身份进行连接。
  • @Jan: 但这会假设定义一个~/.ssh/config 文件,您将在其中命名这两个 ssh 会话,每个会话都通过IdentityFile 显式引用一个私钥。这样,您在使用 ssh 时不必使用任何奇异的选项:ssh mySshSession:mysever/...mySshSession 引用 gitosis 用户、gitosis 服务器和所需的私钥/公钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多