我已经设法在我的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 在“添加存储库和用户”下
答案 0 :(得分:11)
这些说明提到了在安装Gitolite时使用id_rsa.pub
密钥的用户进行克隆。
因此,在声明“~/.ssh
”用户(这是唯一能够使用的用户)时,您的帐户必须在其id_rsa
gitolite使用的id_rsa.pub
和git
密钥中使用克隆gitolite-admin
repo)。
现在,要添加用户,您不仅需要在gitolite.conf
文件(您做过)中声明所述用户,还必须将其公钥添加到本地gitolite-admin
repo' keys
'目录。
- 我要求Steve Franko使用“
生成新的公钥/私钥对ssh-keygen -t dsa
”- 我请Steve Franko向我发送他刚刚生成的PUBLIC密钥
- 我将公钥从
id_dsa.pub
重命名为sfranko.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
然后去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安装,作为参数/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
请注意,任何ssh通信的用户始终是git !您始终通过ssh://git@iptonas:123/arepo
等ssh地址联系Gitolite服务器
但是,由于你有多个SSH密钥可供选择,你可以输入:
git clone gitadmin:gitolite-admin
或git clone foo:newRepo
第一个命令将允许您克隆gitolite-admin
repo(因为您使用git公共和私有ssh密钥执行此操作,因此您有权这样做)。
您可以使用该本地克隆将foo.pub
放入keys
目录,并在newRepo
文件中声明config
。
然后你推回那个repo(和Gitolite发挥它的魔力,创建一个新的repo,为你添加foo.pub
的内容到~git/.ssh/authorized_keys
,用强制命令脚本拦截任何发出的ssh命令foo
)。
(我更喜欢将ssh快捷方式命名为“gitadmin
”而不是git,即使公钥/私钥名为“git.xxx
”,因为“gitadmin
”更能传达<您将使用它执行的ssh命令的em> intent :您将管理git访问权限)
第二个命令允许您克隆newRepo
并对其进行处理。
请注意:
ssh gitadmin
或ssh foo
将显示gitolite版本以及与每个ssh快捷方式“gitadmin
”和“foo
”使用的ssh密钥相关联的权限,如~foo/.ssh/config
文件中所定义。