我设法在我的 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_rsa
和 id_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
tosfranko.pub
- I copy the
sfranko.pub
key into thegitolite-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.pub
在 keys
目录,并声明一个 newRepo
在 config
文件。然后你推回那个 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/