Gitolite:添加用户无法正常工作,并在以root身份克隆时被fallthru拒绝?

Jay*_*Jay 5 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
Run Code Online (Sandbox Code Playgroud)

从NAS获取gitolite-admin的副本:

git clone ssh://root/gitolite-admin
Run Code Online (Sandbox Code Playgroud)

我明白了:

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.
Run Code Online (Sandbox Code Playgroud)

这是我的gitolite.conf文件:

repo gitolite-admin
    RW+     =   git

repo testing
    RW+     =   @all

repo newrepo
    RW+     =   foo
    RW+     =   bar
Run Code Online (Sandbox Code Playgroud)

当我使用以下方法推送我的gitolite-admin副本时:

git push root:gitolite-admin
Run Code Online (Sandbox Code Playgroud)

我明白了:

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
Run Code Online (Sandbox Code Playgroud)

现在,当我试图推动新的回购

当我尝试运行时:

git clone foo:newrepo
Run Code Online (Sandbox Code Playgroud)

我明白了:

Cloning into 'newrepo'...
foo@iptonas's password: 
fatal: 'newrepo' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时:

git clone root:newrepo
Run Code Online (Sandbox Code Playgroud)

我明白了:

Cloning into 'newrepo'...
FATAL: R any newrepo git DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

我不确定我做错了什么?

我按照这些说明操作:http: //www.nineproductions.com/linux/53-gitolite-hosting.html 在"添加存储库和用户"下

Von*_*onC 11

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

因此,您的帐户必须在它~/.sshid_rsaid_rsa.pub声明"时所使用的gitolite键git"用户(这是唯一一个能够克隆gitolite-admin回购).

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

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

如果你在推回之前进行这两项操作gitolite-admin,那么Gitolite将宣布新用户,并且你的git clone foo:newrepo工作将会奏效.

请注意,如果您git按照我之前的建议使用该帐户进行了Gitolite安装,那么您应该在配置文件中:

Host git
    HostName iptonas
    User git
    Port 123
    Identityfile ~/.ssh/git
Run Code Online (Sandbox Code Playgroud)

去吧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将其授权机制建立在公钥名称后面的身份验证上.

再说一次:在服务器端,你必须像'git'这样的用户进行gitolite安装,作为参数a /tmp/git.pub(不是/tmp/id_rsa.pub)


让我们回顾一下,因为这里有很多混乱.Gitolite基于ssh.
这意味着你需要一个帐户(这里是'git')在服务器端(这将是你的Gitolite服务器),其中一个~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
Run Code Online (Sandbox Code Playgroud)

请注意,任何ssh通信的用户总是git!您总是通过ssh地址联系Gitolite服务器ssh://git@iptonas:123/arepo.
除此之外,由于你有多个SSH密钥可供选择,你可以输入:

  • git clone gitadmin:gitolite-admin, 要么
  • git clone foo:newRepo

第一个命令将允许您克隆gitolite-adminrepo(因为您使用git公共和私有ssh密钥执行此操作,因此您有权执行此操作).
您可以使用本地克隆放foo.pubkeys目录,并申报newRepo了在config文件中.
然后你推回那个repo(和Gitolite发挥它的魔力,创建一个新的repo,为你添加foo.pubto 的内容~git/.ssh/authorized_keys,使用强制命令脚本来拦截所发出的任何ssh命令foo).

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

第二个命令允许您克隆newRepo并处理它.

注意:

  • ssh gitadmin, 要么
  • ssh foo

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