CentOS搭建Gitosis服务器

本文详细介绍了如何使用Gitosis搭建Git服务器,并配置用户权限、仓库管理及远程操作的步骤,包括公钥上传、初始化仓库、添加用户和仓库权限设置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gitosis是一套用来管理~/.ssh/authorized_keys文件和实现简单连接限制的脚本。

客户端生产密钥并上传到服务器端:

ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub root@192.168.0.190:/tmp
Gitosis 的工作依赖于某些 Python 工具,所以首先要安装 Python 的 setuptools 包
yum install python python-setuptools

从 Gitosis 项目主页克隆并安装:

git clone git@github.com:res0nat0r/gitosis.git
#或者git clone https://github.com/res0nat0r/gitosis.git
cd gitosis
python setup.py install

创建git服务器管理用户

useradd -m git
passwd git          #设置密码
chown git:git  /home/git   #设置权限
chmod 755 /home/git
cat /etc/passwd
#在文件末尾,你应该能找到类似这样的行:
git:x:1000:1000::/home/git:/bin/sh
#可以换成git自带的git-shell工具,把 bin/sh 改为 /usr/bin/git-shell

初始化 Gitosis

sudo -H -u git gitosis-init < /tmp/id_rsa.pub
#显示以下信息即表示成功
#Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
#Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

这样该公钥的拥有者就能修改用于配置 Gitosis 的那个特殊 Git 仓库了。接下来,需要手工对该仓库中的post-update脚本加上可执行权限:

ln -s /opt/git /home/git/repositories
chmod 755 /opt/git/gitosis-admin.git/hooks/post-update

现在可以试一下用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器,应该会看到类似下面这样:

ssh git@gitserver
//PTY allocation request failed on channel 0
//ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in //environment.
//Connection to gitserver closed.

#使用ssh 的 debug 来调试输出
ssh -v git@gitserver

说明 Gitosis 认出了该用户的身份,但由于没有运行任何 Git 命令,所以它切断了连接。那么,现在运行一个实际的 Git 命令 — 克隆 Gitosis 的控制仓库:

#在你本地计算机上
git clone git@gitserver:gitosis-admin.git

这会得到一个名为 gitosis-admin 的工作目录,主要由两部分组成:

cd gitosis-admin
find .
./gitosis.conf
./keydir
./keydir/root@CLIENT-PC.pub

gitosis.conf 文件是用来设置用户、仓库和权限的控制文件。keydir 目录则是保存所有具有访问权限用户公钥的地方— 每人一个。 Gitosis 会自动从使用gitosis-init 脚本导入的公钥尾部的描述中获取该公钥名字。

$ cat gitosis.conf
[gitosis]

[group gitosis-admin]          #工作组
members = root@CLIENT-PC       #工作组成员
writable = gitosis-admin       #该组对gitosis-admin仓库有读写权限

测试仓库

  • 测试时添加新的用户或使用其他电脑
  • 添加公钥修改配置文件
  • 提交gitosis仓库
#以用户root@server为例
cp ~/.ssh/id_rsa.pub  ./keydir/root@server
vi gitosis.conf
#添加新的仓库
[group hello-git]
members = root@server root@CLIENT-PC
writable = hello-git
#提交仓库
git add .
git commit -m "add hello-git project"
git remote add gitosis-admin git@192.168.0.190:gitosis-admin.git
git push gitosis-admin master

在root@server上初始化库

git init
vi README
git add README
git commit -m "hello-git init"
git remote add hello-git git@192.168.0.190:hello-git.git
git push hello-git master
gitosis.conf文件已经添加root@CLIENT-PC用户访问hello-git仓库权限
git clone git@192.168.0.190:hello-git.git

遇见的一些问题:

  • ~/.ssh/id_rsa.pub。由于客户端是用一台电脑做测试,在测试hello-git仓库时
    ,没有创建新的用户就使用ssh-keygen生成公钥和私钥,管理gitosis-git的公钥
    被替换成新的id_rsa.pub,连gitosis-git仓库都登不上去。添加新的用户或用其他电脑测试。
  • gitosis.conf的用户名和keydir的公钥名不对应。公钥没有.pub后缀,root@server公钥 => root@server.pub
fatal: 'hello-git.git' does not appear to be a git repository
fatal: Could not read from remote repository.
  • 用户权限问题。提交时出现IOError: [Errno 13] Permission denied: /home/git/gitosis/projects.list.错误
chown -R git /home/git/gitosis    #更改文件或目录所属的用户
chgrp -R git /home/git/gitosis    #更改文件或目录所属的组

Refer:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值