debian下使用gitosis+gitweb搭建SSH认证的git服务器

时间:2022-09-05 09:58:51

搭建完成Git服务器后,需要使用两台机器进行测试,一台机器作为服务器端server,一台服务器作为客户端client。整个系统,需要三个计算机账户,这里假设server端的账户名为git,client端需要一个管理员gitadmin,一个开发者gituser。这里的环境,使用两台处于同一局域网内的两台机器作为server以及client,其中server端系统为debian 6,client端为fedora 16。
1    建立server端账户git,用于安装git相关的服务。

sudo useradd -m git #添加git账户

sudo passwd git                #添加git密码

添加完账户之后,如果/etc/default/useradd设置合理的话,系统会自动生成相应的宿主目录。如果没有的话,而且想把托管项目放在宿主目录下的话,则需要手动添加。

su git                                #切到新建的git账户

sudo mkdir /home/git    #新建宿主目录

sudo chown git:git /home/git #修改相应的uid及gid

debian下新建git账户之后,切到git下,相应的bash以及sudo均没有配置,需要重新配置,这里为了方便,直接将之前已经配置好的其他用户的配置文件拷贝过来。

su root

visudo      #配置sudo,将git ALL=(ALL)ALL添加到里面,保存后生效。

su git       #切回git账户

sudo cp /home/XXX/.bashrc  /home/git/

sudo cp /home/XXX/.profile  /home/git/    #XXX为你的其他的宿主目录

这样,server端的git账户就建立完毕。client端的管理账户admin以及user同理可以建立。

2   server端安装git及SSH相关服务

  2.1 安装git并初始化

sudo apt-get install git-core        #安装git,安装成功之后,配置git

git config --global user.name "yourname"

git config --global user.email "yourname@yourmail"   #配置git

  2.2安装ssh服务

   sudo apt-get install openssh-server openssh-client

  2.3配置SSH

安装完成之后,修改ssh配置文件/etc/ssh/sshd_config

   Port 22 # 修改成你想要的登陆端口,如2222

   PermitRootLogin no # 禁止root用户登陆

   StrictModes yes # 检查密钥的用户和权限是否正确,默认打开的

   RSAAuthentication yes # 启用 RSA 认证

   PubkeyAuthentication yes # 启用公钥认证

   PasswordAuthentication no # 禁止密码认证,默认是打开的

   ServerKeyBits 1024 # 修改后变为此状态,将ServerKey强度改为1024比特

   PermitEmptyPasswords no # 修改后变为此状态,禁止空密码进行登录

    修改完成之后,重启SSH服务:

  sudo /etc/init.d/ssh restart

3    client端创建管理员账户并安装SSH,生成认证SSH钥匙对。

sudo useradd -m gitadmin
sudo passwd gitadmin
su gitadmin
cd ~
sudo yum install ssh #配置完git管理员账户并安装完SSH之后,需要生成管理员gitadmin的SSH钥匙对。
ssh-keygen -t rsa #注意配置账户的权限,使其对当前目录具有读写权限。安装过程直接敲写回车即可。

默认的安装生成的SSH公钥,存在宿主目录/home/gitadmin/.ssh/下面,其中id_rsa.pub作为公钥,留做备用。开发者账户gituser同样操作。建议将相应公钥重命名,以免弄混。

sudo cp.ssh/id_rsa.pub ~/temp/
sudo mv ~/temp/id_rsa.pub gitadmin.pub

4   server 端安装gitosis

gitosis是管理git服务器的工具,相比手动管理,使用起来更加方便。

su git
cd ~
mkdir gitosis_setup
cd gitosis_setup
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis
sudo python setup.py install #安装gitosis的过程需要使用python工具包,如果安装失败,需要安装python-setuptools
sudo apt-get install python-setuptools

5   server端配置并运行gitosis

  5.1将第3步中的client端的管理员gitadmin的公钥拷贝或者上传到server端。

  5.2初始化gitosis,初始的过程中需要添加一个管理员。

假设gitadmin的公钥位于宿主目录~中。

su git
cd ~
sudo chmod 777 gitadmin.pub
sudo -H -u git gitosis-init < gitadmin.git #初始化gitosis

此时,会在/home/git目录下生成一个空仓库repositories/gitosis-admin.git,次仓库的目的是管理员gitadmin用来管理git server的,不是托管项目的git。相应的配置文件位于repositories/gitosis-admin.git/gitosis.conf。

同时,如果想要别人能够clone gitosis-admin.git ,需要执行一下操作:

  sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

6     server端安装并配置gitweb(需要安装apache2)

  6.1安装gitweb

sudo apt-get install gitweb apache2
sudo a2enmod rewrite #允许rewrite模块,需要用到。

  这里,我们由于有了一个管理员的空仓库,所以以此作为例子。将/home/git/repositories作为server端项目托管根目录。编辑配置文件

/etc/gitweb.conf
sudo vim /etc/gitweb.conf

  然后修改为如下形式:

$projectroot = "/home/git/repositories";
$git_temp = "/tmp";
#$home_link = $my_uri || "/";
$home_text = "indextext.html";
$projects_list = $projectroot;
$stylesheet = "/gitweb.css";
$logo = "/git-logo.png";
$favicon = "/git-favicon.png";
# enable human readable URLs
$feature{'pathinfo'}{'default'} = [1];

  6.2然后,配置apache2,创建一下新的虚拟host文件gitweb。

  sudo vim /etc/apache2/sites-available/gitweb

  将创建的gitweb文件内容修改为:

<VirtualHost *>
ServerName git.mydomain.com
ServerAlias git DocumentRoot /home/git/repositories
SetEnv GITWEB_CONFIG /etc/gitweb.conf RewriteEngine on
RewriteRule ^/$ /gitweb [PT]
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /gitweb%{REQUEST_URI} [L,PT] # Aliases
ScriptAlias /gitweb /usr/lib/cgi-bin/gitweb.cgi
Alias /gitweb.css /usr/share/gitweb/gitweb.css
Alias /git-logo.png /usr/share/gitweb/git-logo.png
Alias /git-favicon.png /usr/share/gitweb/git-favicon.png # Logfiles
ErrorLog /var/log/apache2/gitweb.error.log
CustomLog /var/log/apache2/gitweb.access.log combined
</VirtualHost>
  sudo a2ensite gitweb         #使其生效。

  上述配置文件中开了RewriteEngine on,需要配置一下apache2。修改/etc/apache2/httpd.conf文件。添加

  LoadModule rewrite module /usr/lib/apache2/modules/mod rewrite.so

  然后,保存后,从其apache2的服务。

  /etc/init.d/apache2 restart

7    client端管理员gitadmin管理gitosis,以上述仓库为例。

  7.1 首先,管理员从git服务器上clone下生成的目标仓库。

su gitadmin
cd ~
mkdir gitproject
cd gitproject
git clone git@192.168.0.2:gitosis-admin.git #此处是同一局域网内的两台机器,直接输入server端的ip地址即可。主目录前面已经设为repositories/
cd gitosis-admin/
ls -al
总用量 24
drwxr-xr-x 5 sshtest sshtest 4096 3月 30 00:51 .
drwxrwxr-x 3 sshtest sshtest 4096 3月 30 00:04 ..
drwxrwxr-x 8 sshtest sshtest 4096 3月 30 00:53 .git
-rw-rw-r-- 1 sshtest sshtest 205 3月 30 00:51 gitosis.conf
drwxrwxr-x 2 sshtest sshtest 4096 3月 30 00:51 keydir

可以看到,目录实际上也是一个git项目,这正式gitosis的有意思的地方,利用git管理git服务器。除了.git以外,里面文件有一个配置文件conf,一个目录keydir。

gitosis.conf正是管理员配置git服务器的配置文件,用于配置用户和权限。keydir目录存放的是所有组成员user的公钥。打开配置文件conf

vim gitosis.conf
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = gitadmin@localhost.localdomain

  可见此时,git服务器上只有一个管理员gitadmin@localhost.localdomain。其拥有读写权限。

  7.2 管理员修改配置文件

这一步,跟大多数的git的管理是一样的,管理员修改完之后,commit,然后push到服务器端。这里新建一个新项目仓库为例。

vim gitosis.conf
[gitosis]
gitweb=yes
[group gitosis-admin]
writable = gitosis-admin
members = gitadmin@localhost.localdomain
[group apps]
writable=apps
members=gitadmin@localhost.localdomain user@192.168.0.3

这里,gitweb=yes启用对gitweb的支持。group apps定义了一个新的空仓库apps,同时授予了gitadmin以及user两个用户读写权限。注意,此时user的公钥由于没有添加,所以无法连接服务器。修改完保存之后,管理员gitadmin执行:

git commit -am "created a new apps repo"
git push

push到服务端之后,立即生效。

  7.3 添加其他成员的公钥

su gitadmin
cd ~/gitproject/gitosis-admin/
sudo cp user.pub key keydir/
git add keydir/usr.pub
git commit -am "granted a new user rights to apps"
git push

  7.4 client端user连接gitserver

su user
cd ~/gitproject
git remote add origin git@YOUR_SERVER:apps.git #建立映射关系,或者直接如下,clone自动建立master的映射关系
git clone git@YOUR_SERVER:apps.git #之后就可以进行正常的git操作。最后push到服务器
git push origin master:refs/heads/master

  搞定,现在,确保基本服务都开启之后,在server端打开 http://localhost/cgi-bin/gitweb.cgi,client端打开相应的http://servername/cgi-bin/gitweb.cgi。看看效果吧:

debian下使用gitosis+gitweb搭建SSH认证的git服务器

8 参考阅读
http://wiki.ubuntu.org.cn/index.php?title=Git%E6%9C%8D%E5%8A%A1%E5%99%A8Gitosis%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE&variant=zh-hans
http://serverfault.com/questions/72732/how-to-set-up-gitweb
http://blog.csdn.net/wirror800/article/details/5189564

debian下使用gitosis+gitweb搭建SSH认证的git服务器的更多相关文章

  1. Mac下使用终端连接远程使用ssh协议的git服务器

    最近换了台新电脑, MacBook pro,拿到新电脑之后小小心喜了一下(终于解脱windows的束缚拥抱mac啦), 然后就开始苦逼的安装各种开发环境了. 之前在windows上使用tortoise ...

  2. 搭建通过 ssh 访问的 Git 服务器

    一.Git 协议 Git 可以使用四种主要的协议来传输数据:本地传输,ssh 协议,Git 协议和 HTTP 协议. Git 使用的传输协议中最常见的就是 ssh 了.大多数环境已经支持通过 ssh ...

  3. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  4. 教你搭建你自己的Git服务器

    http://lib.csdn.net/article/git/50086 导读 现在我们将要学习如何搭建 git 服务器,如何编写自定义的 Git 钩子来在特定的事件触发相应的动作(例如通知),或者 ...

  5. SSH方式连接Git服务器需要注意的地方

    如何安装Git?这个我这里就不再多说了,想要了解的可以自行百度,以下文字是基于本地Git安装OK,且Git服务器可用的情况下,我的Git是GitLab 接下来开始操作 1:首先在本地生成私钥和公钥,这 ...

  6. 记一次Debian下PHP环境的搭建(nginx&plus;mariadb&plus;PHP)!

    顺序是先安装nginx,然后安装mariadb,最后安装PHP.系统用的是debian7 安装nginx sudo apt-get install nginx 我这里用的是稳定的源,没用测试的源,所以 ...

  7. Linux下基于HTTP协议带用户认证的GIT开发环境设置

    Git 的访问可以采用 HTTP 或 SSH 协议安全的访问,通常我们使用 gitlib 进行 Web 管理,但是在 Linux 命令行开发环境下,基本都是使用 SSH 协议,只需要在 gitlib ...

  8. Ubuntu下利用Mono&comma;Jexus搭建Asp&period;Net&lpar;MVC&rpar; Web服务器

    最近在Ubuntu上搭建了Asp.Net的Web服务器,其中遇到很多问题,整理一下思路,以备后用. 搭建环境以及配套软件 Ubuntu: 11.10 Mono:3.0.6 下载地址(http://do ...

  9. win下使用git-bash工具进行ssh免密登录服务器

    1.ssh-keygen.exe 生成公钥私钥(.pub) 2.ssh-agent.exe bash  指定工具 3.ssh-add.exe   ****   添加私钥 OK

随机推荐

  1. (转载)linux中设备文件配置程序udev详解

    如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...

  2. jquery判断起止时间大小和非空

    //时间判断 function CheckDate() { var startTime = $('#txtTime').val(); //获取当前日期 var start = new Date(sta ...

  3. mac下Android开发环境搭建

    之前一段时间在学习ios的开发,近一段时间想着也接触下Android开发,以来加深对移动端开发的理解.这里根据自己配置Android开发环境的过程,比较详细的来总结下自己的安装过程,希望对一些正准备配 ...

  4. Sqoop2环境搭建

    正在准备做Spark SQL external data source与关系型数据库交互的部分,参考下Sqoop2是如何操作关系型数据库的. 下载地址:http://archive.cloudera. ...

  5. 前端问题——png图片在IE6下透明失效,解决办法

    今天,一位同事问我问题,png 图片在IE6下透明背景失效. 解决办法,在网上查了很多,最后还是采用两种方案来解决这个问题 1.把这个网页的png格式图片变更为gif格式的图片.问题解决 2.就是让这 ...

  6. HTML&plus;CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  7. node包管理器

    NPM小结   nodejs的出现,可以算是前端里程碑式的一个事件,它让前端攻城狮们摆脱了浏览器的束缚,踏上了一个更加宽广的舞台.前端的可能性,从此更加具有想象空间. 随着一系列基于nodes的应用/ ...

  8. JavaScript&vert;&vert;什么是面向对象

    什么是对象&面向对象 对象 是一个整体,对外提供功能.例:一个手机 电脑. 面向对象 使用的时候只关注提供的功能不关注内部的细节. 面向对象有三大特点: 抽象:将问题需求抽象出来 例:一个员工 ...

  9. ANSYS耦合

    目录 定义 如何生成耦合*度集 1.在给定节点处生成并修改耦合*度集 2.耦合重合节点. 3.迫使节点有相同的表现方式 生成更多的耦合集 1. CPLGEN 2.CPSGEN 使用耦合注意事项 约 ...

  10. Hbase-2&period;0&period;0&lowbar;04&lowbar;Hbase原理

    参考博客:Hadoop HBase概念学习系列 参考博客:Hadoop HBase概念学习系列之HBase里的Zookeeper(二十一) 参考博客:Hadoop HBase概念学习系列之HBase里 ...