6

我设法在我的 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

现在,当我尝试推送到新的仓库时

当我尝试运行时:

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 在“添加存储库和用户”下

4

1 回答 1

12

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

因此,在声明“ ”用户(这是唯一能够克隆repo 的用户)时,您的帐户中必须包含gitolite 使用~/.sshid_rsa和键。id_rsa.pubgitgitolite-admin

现在,要添加用户,您不仅必须在gitolite.conf文件中声明所述用户(您已经这样做了),还必须将他的公钥添加到本地gitolite-adminrepo ' keys' 目录。

  • 我让 Steve Franko 使用“<code>ssh-keygen -t dsa”</li> 生成一个新的公钥/私钥对
  • 我让 Steve Franko 将他刚刚生成的 PUBLIC 密钥发送给我
  • 我将公钥重命名id_dsa.pubsfranko.pub
  • sfranko.pub我将密钥复制到gitolite-admin/keydir目录中

如果您在 push back 之前执行了这两项操作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在流程中的任何地方使用/查看。


实际上我确实生成了两个密钥集,所以我的~/.ssh文件夹目前有:id_rsa, id_rsa.pub, id_foo,id_foo.pub

您的~/.ssh文件夹应包含:

git, git.pub, id_foo,id_foo.pub

Gitolite 的授权机制基于在公钥名称之后进行的身份验证

/tmp/git.pub再说一遍:在服务器端,您必须以 'git' 之类的用户身份进行 gitolite 安装,并以 a (not /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 地址联系 Gitolite 服务器,例如ssh://git@iptonas:123/arepo.
除了,因为你有多个 SSH 密钥可供选择,你可以输入:

  • git clone gitadmin:gitolite-admin, 或者
  • git clone foo:newRepo

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

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

第二个命令允许您克隆您的newRepo并对其进行处理。

注意:

  • ssh gitadmin, 或者
  • ssh foo

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

于 2012-06-01T04:00:33.217 回答