北京SEO

Linux中使用Gitolite搭建Git服务器,服务器和客户端可以为同一台

2019/10/10/17:47:08  阅读:1894  来源:谷歌SEO算法  标签: 小明SEO博客

在linux系统中我们可以直接使用Gitolite 搭建 Git 服务器了,下面本文章就给各位介绍详细的配置过程,希望能帮助到大家。

一般来说,配置git服务器的话,需要一台服务器,还需要一个客户端来验证服务器是否搭建成功,而一般开发者基本都只有一台服务器,那就需要这台服务器既作为Git的服务器,又要作为客户端来使用了,下面的教程就是以服务器和客户端都是同一台服务器为例的。如果需要服务器和客户端分开的话,只需要将下面列出的服务器端和客户端的操作到相应的机器上操作就可以了。

第一步,服务器端创建git服务器专用账户,账户名字就叫git吧,创建之后为其设置密码,代码如下:

  1. #useradd-m-s/bin/bashgit
  2. #passwdgit
  3. EnternewUNIXpassword:
  4. RetypenewUNIXpassword:
  5. passwd:passwordupdatedsuccessfully

切换到git用户,在家目录/home/git下创建安装目录bin,代码如下:

  1. root@letuknowit:~#su-git
  2. git@letuknowit:~$mkdirbin
  3. git@letuknowit:~$ll
  4. total24
  5. drwxr-xr-x3gitgit4096Aug2010:38./
  6. drwxr-xr-x8rootroot4096Aug2010:36../
  7. -rw-r--r--1gitgit220Apr32012.bash_logout
  8. -rw-r--r--1gitgit3486Apr32012.bashrc
  9. drwxrwxr-x2gitgit4096Aug2010:38bin/
  10. -rw-r--r--1gitgit675Apr32012.profile

获取 Gitolite 并安装,gitolite要安装在服务器端,安装之前要保证系统上已经安装了git,代码如下:

  1. git@letuknowit:~$gitclonegit://github.com/sitaramc/gitolite
  2. Cloninginto'gitolite'...
  3. remote:Countingobjects:8682,done.
  4. remote:Total8682(delta0),reused0(delta0)
  5. Receivingobjects:100%(8682/8682),3.61MiB|33KiB/s,done.
  6. Resolvingdeltas:100%(4917/4917),done.
  7. git@letuknowit:~$ll
  8. total28
  9. drwxr-xr-x4gitgit4096Aug2010:40./
  10. drwxr-xr-x8rootroot4096Aug2010:36../
  11. -rw-r--r--1gitgit220Apr32012.bash_logout
  12. -rw-r--r--1gitgit3486Apr32012.bashrc
  13. drwxrwxr-x2gitgit4096Aug2010:38bin/
  14. drwxr-xr-x6gitgit4096Aug2010:40gitolite/
  15. -rw-r--r--1gitgit675Apr32012.profile
  16. git@letuknowit:~$gitolite/install-ln
  17. git@letuknowit:~$ll
  18. total28
  19. drwxr-xr-x4gitgit4096Aug2010:40./
  20. drwxr-xr-x8rootroot4096Aug2010:36../
  21. -rw-r--r--1gitgit220Apr32012.bash_logout
  22. -rw-r--r--1gitgit3486Apr32012.bashrc
  23. drwxrwxr-x2gitgit4096Aug2010:44bin/
  24. drwxr-xr-x6gitgit4096Aug2010:40gitolite/
  25. -rw-r--r--1gitgit675Apr32012.profile

第二步,客户端,创建 Gitolite 服务器管理员用户,并创建管理员用户密钥.

因为我们是在同一台服务器上,直接exit退回到root用户,之后变身为客户端模式,如果客户端和服务器分开的话,不需要exit指令了,直接在客户端执行添加用户的指令就可以了,这里的Gitolite服务器管理员用户名我们叫gitAdmin,代码如下:

  1. git@letuknowit:~$exit
  2. logout
  3. root@letuknowit:~#useradd-m-s/bin/bashgitAdmin
  4. root@letuknowit:~#passwdgitAdmin
  5. EnternewUNIXpassword:
  6. RetypenewUNIXpassword:
  7. passwd:passwordupdatedsuccessfully

切换到gitAdmin用户,创建用户密钥,代码如下:

  1. root@letuknowit:~#su-gitAdmin
  2. gitAdmin@letuknowit:~$mkdir.ssh
  3. gitAdmin@letuknowit:~$ll
  4. total24
  5. drwxr-xr-x3gitAdmingitAdmin4096Aug2010:48./
  6. drwxr-xr-x9rootroot4096Aug2010:46../
  7. -rw-r--r--1gitAdmingitAdmin220Apr32012.bash_logout
  8. -rw-r--r--1gitAdmingitAdmin3486Apr32012.bashrc
  9. -rw-r--r--1gitAdmingitAdmin675Apr32012.profile
  10. drwxrwxr-x2gitAdmingitAdmin4096Aug2010:48.ssh/
  11. gitAdmin@letuknowit:~$ssh-keygen-f.ssh/gitAdmin
  12. Generatingpublic/privatersakeypair.
  13. Enterpassphrase(emptyfornopassphrase):
  14. Entersamepassphraseagain:
  15. Youridentificationhasbeensavedin.ssh/gitAdmin.
  16. Yourpublickeyhasbeensavedin.ssh/gitAdmin.pub.
  17. Thekeyfingerprintis:
  18. 84:a0:9d:d6:c6:43:57:0e:22:cd:67:97:8e:03:be:09gitAdmin@letuknowit
  19. Thekey'srandomartimageis:
  20. +--[RSA2048]----+
  21. |oooo...|
  22. |oB++ooo|
  23. |.+.*+.+.|
  24. |.E..oo.|
  25. |.oS.|
  26. |o|
  27. ||
  28. ||
  29. ||
  30. +-----------------+

接下来将管理员公钥(gitAdmin.pub)复制 到服务器上的 git 用户的家目录下,因为我们这个服务器和客户端是在一起的,所以就方便了,如果是两台机器的话,你可能要想点办法去拷贝这个文件了,代码如下:

  1. gitAdmin@letuknowit:~$exit
  2. logout
  3. root@letuknowit:~#cp/home/gitAdmin/.ssh/gitAdmin.pub/home/git/
  4. root@letuknowit:~#ll/home/git
  5. total36
  6. drwxr-xr-x4gitgit4096Aug2010:53./
  7. drwxr-xr-x9rootroot4096Aug2010:46../
  8. -rw-------1gitgit788Aug2010:45.bash_history
  9. -rw-r--r--1gitgit220Apr32012.bash_logout
  10. -rw-r--r--1gitgit3486Apr32012.bashrc
  11. drwxrwxr-x2gitgit4096Aug2010:44bin/
  12. -rw-r--r--1rootroot412Aug2010:53gitAdmin.pub
  13. drwxr-xr-x6gitgit4096Aug2010:40gitolite/
  14. -rw-r--r--1gitgit675Apr32012.profile

第三步,服务器端配置 Gitolite 服务器,再回到服务器端,用从客户端复制过来的 Gitolite 管理员用户公钥,gitAdmin.pub,配置 Gitolite 服务器,代码如下:

  1. root@letuknowit:~#su-git
  2. git@letuknowit:~$gitolitesetup-pkgitAdmin.pub
  3. InitializedemptyGitrepositoryin/home/git/repositories/gitolite-admin.git/
  4. InitializedemptyGitrepositoryin/home/git/repositories/testing.git/
  5. WARNING:/home/git/.sshmissing;creatinganewone
  6. (thisisnormalonabrandnewinstall)
  7. WARNING:/home/git/.ssh/authorized_keysmissing;creatinganewone
  8. (thisisnormalonabrandnewinstall)
  9. git@letuknowit:~$ll
  10. total60
  11. drwxr-xr-x7gitgit4096Aug2010:57./
  12. drwxr-xr-x9rootroot4096Aug2010:46../
  13. -rw-------1gitgit788Aug2010:45.bash_history
  14. -rw-r--r--1gitgit220Apr32012.bash_logout
  15. -rw-r--r--1gitgit3486Apr32012.bashrc
  16. drwxrwxr-x2gitgit4096Aug2010:44bin/
  17. -rw-r--r--1rootroot412Aug2010:53gitAdmin.pub
  18. drwxr-xr-x6gitgit4096Aug2010:40gitolite/
  19. drwx------6gitgit4096Aug2010:57.gitolite/
  20. -rw-------1gitgit6662Aug2010:57.gitolite.rc
  21. -rw-r--r--1gitgit675Apr32012.profile
  22. -rw-------1gitgit12Aug2010:57projects.list
  23. drwx------4gitgit4096Aug2010:57repositories/
  24. drwx------2gitgit4096Aug2010:57.ssh/

你会看到在git用户的家目录下多了很多的文件夹,具体请看上面ll命令的结果.

第四步,客户端验证Gitolite管理员账户访问服务器的别名以及验证别名是否成功,代码如下:

  1. git@letuknowit:~$exit
  2. logout
  3. root@letuknowit:~#su-gitAdmin
  4. gitAdmin@letuknowit:~$ll.ssh/
  5. total16
  6. drwxrwxr-x2gitAdmingitAdmin4096Aug2010:49./
  7. drwxr-xr-x3gitAdmingitAdmin4096Aug2010:53../
  8. -rw-------1gitAdmingitAdmin1679Aug2010:49gitAdmin
  9. -rw-r--r--1gitAdmingitAdmin412Aug2010:49gitAdmin.pub
  10. gitAdmin@letuknowit:~$vi.ssh/config

切换到gitAdmin账户,在.ssh文件夹下新建config文件,输入下面内容:

  1. hostgit
  2. usergit
  3. hostnamexxx.xxx.xxx.xxx
  4. port22
  5. identityfile~/.ssh/gitAdmin

host:随便定义,用于客户端标识所连接服务端的名字;

user:ssh登录服务器的账户,就是服务器端的那个git专用账户的用户名;

hostname:服务器主机名,或者直接填写服务器 IP 地址;

port:服务器的ssh访问端口,默认22;

identityfile:管理员登录服务器所使用的验证密钥;

使用服务器别名从 Gitolite 服务器 clone Gitolite 服务器管理仓库 gitolite-admin,验证别名配置是否成功,代码如下:

  1. gitAdmin@letuknowit:~$gitclonegit:gitolite-admin
  2. Cloninginto'gitolite-admin'...
  3. Theauthenticityofhost'xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx)'can'tbeestablished.
  4. ECDSAkeyfingerprintisc1:c2:6a:7a:68:c8:e5:a6:87:f4:9b:95:d5:fd:ff:09.
  5. Areyousureyouwanttocontinueconnecting(yes/no)?yes
  6. Warning:Permanentlyadded'xxx.xxx.xxx.xxx'(ECDSA)tothelistofknownhosts.--phpfensi.com
  7. remote:Countingobjects:6,done.
  8. remote:Compressingobjects:100%(4/4),done.
  9. Receivingobjects:100%(6/6),763bytes,done.
  10. remote:Total6(delta0),reused0(delta0)

第五步,客户端给普通用户创建访问 Gitolite 服务器的密钥.

系统里已经有一个kris的账户了,如果没有的话,可以自己创建一个,名字随便取,先通过ssh-keygen创建密钥,代码如下:

  1. gitAdmin@letuknowit:~$exit
  2. logout
  3. root@letuknowit:~#su-kris
  4. kris@letuknowit:~$ssh-keygen-f.ssh/kris
  5. Generatingpublic/privatersakeypair.
  6. Enterpassphrase(emptyfornopassphrase):
  7. Entersamepassphraseagain:
  8. Youridentificationhasbeensavedin.ssh/kris.
  9. Yourpublickeyhasbeensavedin.ssh/kris.pub.
  10. Thekeyfingerprintis:
  11. 18:7c:21:e8:7b:4c:2a:d9:b2:e2:eb:db:5b:94:65:49kris@letuknowit
  12. Thekey'srandomartimageis:
  13. +--[RSA2048]----+
  14. |..E.|
  15. |......|
  16. |.o+.|
  17. |.=+|
  18. |oB.S|
  19. |+=o|
  20. |+o|
  21. |.o.|
  22. |o*oo.|
  23. +-----------------+
  24. kris@letuknowit:~$ll.ssh/
  25. total20
  26. drwx------2kriskris4096Aug2011:22./
  27. drwxr-xr-x9kriskris4096Aug2009:56../
  28. -rw-r--r--1kriskris442Nov202013known_hosts
  29. -rw-------1kriskris1679Aug2011:22kris
  30. -rw-r--r--1kriskris410Aug2011:22kris.pub

复制用户公钥(kris.pub)给 Gitolite 管理员(gitAdmin),代码如下:

  1. kris@letuknowit:~$exit
  2. logout
  3. root@letuknowit:~#cp/home/kris/.ssh/kris.pub/home/gitAdmin/gitolite-admin/keydir/
  4. root@letuknowit:~#ll!$
  5. ll/home/gitAdmin/gitolite-admin/keydir/
  6. total16
  7. drwxrwxr-x2gitAdmingitAdmin4096Aug2012:09./
  8. drwxr-xr-x5gitAdmingitAdmin4096Aug2011:19../
  9. -rw-rw-r--1gitAdmingitAdmin412Aug2011:19gitAdmin.pub
  10. -rw-r--r--1rootroot410Aug2012:09kris.pub

使用公钥(kris.pub)为用户 kris 创建一个他能访问的 Git 仓库,代码如下:

  1. gitAdmin@letuknowit:~/gitolite-admin$gitadd.
  2. gitAdmin@letuknowit:~/gitolite-admin$gitstatus-s
  3. Mconf/gitolite.conf
  4. Akeydir/kris.pub
  5. gitAdmin@letuknowit:~/gitolite-admin$gitcommit-m"adduserkrisbykris.gitandcreatearepoletuforit"
  6. ***Pleasetellmewhoyouare.
  7. Run
  8. gitconfig--globaluser.email"you@example.com"
  9. gitconfig--globaluser.name"YourName"
  10. tosetyouraccount'sdefaultidentity.
  11. Omit--globaltosettheidentityonlyinthisrepository.
  12. fatal:emptyident<gitAdmin@letuknowit.(none)>notallowed

这里需要先配置下用户名和email,否则会给出错误提示,代码如下:

  1. gitAdmin@letuknowit:~/gitolite-admin$gitconfig--globaluser.email"xxx@163.com"
  2. gitAdmin@letuknowit:~/gitolite-admin$gitconfig--globaluser.name"kris"
  3. gitAdmin@letuknowit:~/gitolite-admin$gitcommit-m"adduserkrisbykris.gitandcreatearepoletuforit"
  4. [masteref0bde9]adduserkrisbykris.gitandcreatearepoletuforit
  5. 2fileschanged,4insertions(+)
  6. createmode100644keydir/kris.pub
  7. gitAdmin@letuknowit:~/gitolite-admin$gitstatus
  8. #Onbranchmaster
  9. #Yourbranchisaheadof'origin/master'by1commit.
  10. #
  11. nothingtocommit(workingdirectoryclean)
  12. gitAdmin@letuknowit:~/gitolite-admin$gitpushoriginmaster
  13. Countingobjects:10,done.
  14. Deltacompressionusingupto2threads.
  15. Compressingobjects:100%(5/5),done.
  16. Writingobjects:100%(6/6),840bytes,done.
  17. Total6(delta0),reused0(delta0)
  18. remote:InitializedemptyGitrepositoryin/home/git/repositories/letu.git/
  19. Togit:gitolite-admin
  20. b19c84d..ef0bde9master->master

切换到拥有私钥(~/.ssh/kris)的用户 kris,尝试使用私钥 clone “letu”这个git库,代码如下:

  1. gitAdmin@letuknowit:~/gitolite-admin$exit
  2. logout
  3. root@letuknowit:~#su-kris
  4. kris@letuknowit:~$ll.ssh/
  5. total20
  6. drwx------2kriskris4096Aug2011:22./
  7. drwxr-xr-x9kriskris4096Aug2009:56../
  8. -rw-r--r--1kriskris442Nov202013known_hosts
  9. -rw-------1kriskris1679Aug2011:22kris
  10. -rw-r--r--1kriskris410Aug2011:22kris.pub
  11. kris@letuknowit:~$vi.ssh/config

为了方便,我们这里也给kris用户配置一个访问别名,输入以下内容后保存,代码如下:

  1. hostkris
  2. usergit
  3. hostnamexxx.xxx.xxx.xxx
  4. port22
  5. identityfile~/.ssh/kris

下面就可以clone 之前添加的letu这个git库了,代码如下:

  1. kris@letuknowit:~/$gitclonekris:letu
  2. Cloninginto'letu'...
  3. warning:Youappeartohaveclonedanemptyrepository.
  4. kris@letuknowit:~$cdletu/
  5. kris@letuknowit:~/letu$gitstatus
  6. #Onbranchmaster
  7. #
  8. #Initialcommit
  9. #
  10. nothingtocommit(create/copyfilesanduse"gitadd"totrack)
  11. kris@letuknowit:~/letu$echo"Hellogit">init.txt
  12. kris@letuknowit:~/letu$gitadd.
  13. kris@letuknowit:~/letu$gitstatus.
  14. #Onbranchmaster
  15. #
  16. #Initialcommit
  17. #
  18. #Changestobecommitted:
  19. #(use"gitrm--cached..."tounstage)
  20. #
  21. #newfile:init.txt
  22. #
  23. kris@letuknowit:~/letu$gitcommit-m"Initrepo"
  24. kris@letuknowit:~/letu$gitpushoriginmaster

广告内容

Linux中使用Gitolite搭建Git服务器,服务器和客户端可以为同一台 Linux中使用Gitolite搭建Git服务器,服务器和客户端可以为同一台 Linux中使用Gitolite搭建Git服务器,服务器和客户端可以为同一台

相关阅读

热门评论

SEO探索者团队 SEO探索者团队

SEO服务&网站优化

总篇数182

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法