Gitolite:添加用户不起作用,并且在克隆为 root 时被 fallthru 拒绝?

标签 git clone gitolite

我设法在我的 NAS 上初始化了一个空的 git repo,我尝试通过生成一个新的公钥“foo.pub”并将其复制+粘贴到 keydir/并提交并将其推送到 NAS 来添加一个新用户.

一、文件:

这是我的 ~/.ssh/config 文件:

Host root
    HostName iptonas
    User root
    Port 123        

Host foo
    HostName iptonas
    User foo
    Port 123
    identityfile ~/.ssh/foo

从 NAS 获取 gitolite-admin 的副本:
git clone ssh://root/gitolite-admin

我得到:
Cloning into 'gitolite-admin'...
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (1/1), done.

这是我的 gitolite.conf 文件:
repo gitolite-admin
    RW+     =   git

repo testing
    RW+     =   @all

repo newrepo
    RW+     =   foo
    RW+     =   bar

当我使用以下命令推送我的 gitolite-admin 副本时:
git push root:gitolite-admin

我得到:
Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 1.02 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Initialized empty Git repository in /root/repositories/newrepo.git/
To root:gitolite-admin
   897113c..e7e2daf  master -> master

现在,当我尝试推送到新的 repo

当我尝试运行时:
git clone foo:newrepo

我得到:
Cloning into 'newrepo'...
foo@iptonas's password: 
fatal: 'newrepo' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

当我尝试运行时:
git clone root:newrepo

我得到:
Cloning into 'newrepo'...
FATAL: R any newrepo git DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

我不确定我做错了什么?

我正在遵循以下说明:
http://www.nineproductions.com/linux/53-gitolite-hosting.html
在“添加存储库和用户”下

最佳答案

这些说明提到使用具有 id_rsa.pub 的用户进行克隆。安装 Gitolite 时使用的 key 。

因此,您的帐户必须在其 ~/.ssh id_rsaid_rsa.pub gitolite 在声明 ' git 时使用的键' 用户(这是唯一能够克隆 gitolite-admin 存储库的用户)。

现在,要添加用户,您不仅需要在 gitolite.conf 中声明该用户。文件(你做了),你还必须将他的公钥添加到本地 gitolite-admin repo 'keys ' 目录。

  • I ask Steve Franko to generate a new public/private key pair using ”ssh-keygen -t dsa
  • I ask Steve Franko to send me the PUBLIC key he just generated
  • I rename the public key from id_dsa.pub to sfranko.pub
  • I copy the sfranko.pub key into the gitolite-admin/keydir directory


如果您在推回 gitolite-admin 之前执行了这两项操作,然后 Gitolite 将声明该新用户,以及您的 git clone foo:newrepo将工作。

请注意,如果您使用 git 安装 Gitolite我之前推荐的帐户,你应该在你的配置文件中有:
Host git
    HostName iptonas
    User git
    Port 123
    Identityfile ~/.ssh/git

git clone git:gitolite-admin .

你应该看到/使用的唯一一次root在服务器端安装开始时,为了声明/添加git帐户。
在那之后,我真的建议你不要使用/查看root在您的流程中的任何地方。

Actually I did generate two key sets, so my ~/.ssh folder currently has: id_rsa, id_rsa.pub, id_foo, id_foo.pub



您的 ~/.ssh文件夹应包含:
git , git.pub , id_foo , id_foo.pub
Gitolite 的授权机制基于在公钥名称后进行的身份验证 .

再次重申:在服务器端,您必须以 'git' 之类的用户身份进行 gitolite 安装,参数为 /tmp/git.pub。 (不是 /tmp/id_rsa.pub )

让我们回顾一下,因为这里有很多困惑。 Gitolite 基于 ssh .
这意味着您在服务器端(将是您的 Gitolite 服务器)需要一个帐户(此处为“git”),其中一个 ~git/.ssh/authorized_keys文件将记录所有 Gitolite 管理员/用户公钥。

在客户端(您的用户 foo),您需要(至少对于您的第一个用户)来自 git 的公钥和私钥,以及来自 foo 的公钥和私钥。

您的 ~foo/.ssh/config文件将包含:
Host gitadmin
    HostName iptonas
    User git
    Port 123        
    identityfile ~/.ssh/git

Host foo
    HostName iptonas
    User git
    Port 123
    identityfile ~/.ssh/foo

注意 的用户任何 ssh 通信始终是 git !您总是通过像 ssh://git@iptonas:123/arepo 这样的 ssh 地址联系 Gitolite 服务器。 .
除了,因为你有多个 SSH key 可供选择,你可以输入:
  • git clone gitadmin:gitolite-admin , 或
  • git clone foo:newRepo

  • 第一个命令将允许您克隆 gitolite-admin repo(因为您使用 git public 和 private ssh key 执行此操作,因此您有权这样做)。
    您可以使用该本地克隆来放置 foo.pubkeys目录,并声明一个 newRepoconfig文件。
    然后你推回那个 repo(Gitolite 会发挥它的魔力,创建一个新的 repo,为你添加 foo.pub 的内容到 ~git/.ssh/authorized_keys,使用强制命令脚本来拦截由 foo 发出的任何 ssh 命令)。

    (我更喜欢将 ssh 快捷方式命名为“gitadmin”而不是 git,即使公钥/私钥被命名为“git.xxx”,因为“gitadmin”更好地传达了您将使用它执行的 ssh 命令的意图:您将管理 git 访问权限)

    第二个命令允许你克隆你的 newRepo并为此努力。

    注意:
  • ssh gitadmin , 或
  • ssh foo

  • 将显示 gitolite 版本以及与每个 ssh 快捷方式使用的 ssh 键相关的权限 'gitadmin ' 和 ' foo ',如 ~foo/.ssh/config 中所定义文件。

    关于Gitolite:添加用户不起作用,并且在克隆为 root 时被 fallthru 拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843781/

    相关文章:

    javascript - jquery克隆一个没有文本内容的html结构

    gitweb 在 Ubuntu 14.04.2 上报告 "404 - No projects found"

    linux - Gitolite 错误 : gitolite-admin not a repo

    java - 将库项目从 Git 导入到我的项目中不起作用 (Eclipse)

    windows - 在 Windows 上使用 msysgit 设置 Git 服务器

    git - 不能忽略 .idea/workspace.xml - 不断 pop

    python - 如何克隆 Python 生成器对象?

    jQuery 克隆问题

    git - 如何管理 Git 存储库的 ACL?

    git - 克隆一些远程分支并将它们推送到新的存储库?