Git私服搭建

news/2025/2/12 12:15:12/

系统环境

系统: Linux:CentOS 7.2 64位

由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。

查看ssh版本:

[root@****** ~]# ssh -V# 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

避免系统环境和其他的不一致,请核对您系统的版本,其他发行版请对应修改。

安装git

建议以下操作都切换到root:

# 请确保您切换到了root账户
$ su root
$ yum install -y git# 验证是否安装成功
$ git --version
# 输出如下内容表示成功:
git version x.x.x.x

添加git的管理的账户和设置密码

设置专门管理git的账号非必须,但是建议这么操作。

# 添加git账户
$ adduser git# 修改git的密码
$ passwd git
# 然后两次输入git的密码确认后。# 查看git是否安装成功
$ cd /home && ls -al
# 如果已经有了git,那么表示成,参考如下:
drwxr-xr-x.  5 root root 4096 Apr  4 15:03 .
dr-xr-xr-x. 19 root root 4096 Apr  4 15:05 ..
drwx------  10 git  git  4096 Apr  4 00:26 git# 默认还给我们分配一个名字叫git的组。

git的权限管理

git仓库的权限管理,我们可以手动进行管理和配置,也可以通过其他辅助工具。如果小团队的话,直接通过ssh公钥进行管理即可,如果大点的团队,最好用gitolite或者gitosis,两者都差不多,一个是Perl开发,一个是Python开发。

以下我分别介绍手动管理权限和使用gitolite管理的方式,注意两者不兼容,不能混用。

git的手动权限管理

经过以上步骤,其实服务器的基本已经配置好,但是需要设置权限和配置远程访问git仓库的方式。我们只介绍ssh的方式,https不做介绍。

配置服务端的ssh访问

切换到git账号,并创建ssh的默认目录和校验公钥的配置文件

# 1.切换到git账号
$ su git
# 2.进入 git账户的主目录
$ cd /home/git# 3.创建.ssh的配置,如果此文件夹已经存在请忽略此步。
$ mkdir .ssh# 4. 进入刚创建的.ssh目录并创建authorized_keys文件,此文件存放客户端远程访问的 ssh的公钥。
$ cd /home/git/.ssh
$ touch authorized_keys# 5. 设置权限,此步骤不能省略,而且权限值也不要改,不然会报错。
$ chmod 700 /home/git/.ssh/
$ chmod 600 /home/git/.ssh/authorized_keys

此时,服务端的配置基本完成。接下需要把客户端的公钥拷贝到authorized_keys文件中。

配置客户端的ssh私钥并上传服务器

以下是客户端创建ssh私钥和拷贝的过程,如果您有私钥越过创建私钥的过程。

请用您的客户端进入终端(如果只有一台电脑,可以用不同的账号模拟不同客户端)

第一步: 创建客户端的ssh私钥和公钥

检查是否已经拥有ssh公钥和私钥:进入用户的主目录。

用户主目录:
Windows系统:C:\Users\用户名
Linux系统:/home/用户名
Mac系统:/Users/用户名

然后查看是否有.ssh文件夹,此文件夹下是否有如下几个文件。

# 用户主目录的.ssh文件夹下
.ssh
├── id_rsa
└── id_rsa.pub  # 我们要用的私钥

如果没有,那么用ssh-keygen创建ssh的私钥。

$ ssh-keygen -t rsa# 接下来,三个回车默认即可。

创建私钥成功后,在查看用户目录是否有意加有了公钥文件id_rsa.pub

第二步: 拷贝私钥到git的服务器

如何把客户端的文件拷贝到服务器端,我建议用scp命令进行拷贝。

以下以mac系统为例:

# 首先进入我的用户主目录的.ssh目录下,注意用户名xxx替换成自己的
$ cd /Users/xxx/.ssh# 以下命令是:把本地的id_rsa.pub文件拷贝到 aicoder.com服务器,登录aicoder.com服务的账号是git。
# 冒号后面默认就是git账号的主目录,最后文件被保存成laoma.pub
# 注意:把域名换成你自己的或者ip,最后的文件名可以自己定,后面还有用。
$ scp ./id_rsa.pub git@aicoder.com:.ssh/laoma.pub

服务器端添加客户端的SSH公钥

切换到服务器端,把刚才上传的laoma.pub文件的内容添加到 authorized_keys中,就可以允许客户端ssh访问了。

# 切换到git账户
$ su git
$ cd /home/git/.ssh$ ls -al
# 查看一下.ssh目录是否有authorized_keys和laoma.pub文件
# .
# |-- authorized_keys
# `-- laoma.pub# 如果有,那么进行下面的把laoma.pub文件中的内容添加到authorized_keys中.
$ cat laoma.pub >> authorized_keys# >> 是在文件后面追加的意思,主要如果用其他编辑器,每个ssh的pub要单独一行,建议用cat命令方便简单。

到此为止,您配置的客户端应该可以ssh的方式直接用git账号登录服务器。(当然不安全,后面可以控制)

# 在客户端用ssh测试连接远程服务器,请将域名aicoder.com换成你的ip地址或者域名
$ ssh git@aicoder.com    # 第一次连接有警告,输入yes继续即可。如果可以连接上,那么恭喜你的ssh配置已经可以了。 

服务器端创建测试git仓库

进入服务器的终端。

# 切换到git账号
$ su git
# 进入git账号的用户主目录。$ cd /home/git
# 在用户主目录下创建 test.git仓库的文件夹$ mkdir test.git  && cd test.git
# 在test.git目录下初始化git仓库$ git init --bare
# 输出如下内容,表示成功
Initialized empty Git repository in /home/git/test.git/

git init --bare 是在当前目录创建一个裸仓库,也就是说没有工作区的文件,直接把git仓库隐藏的文件放在当前目录下,此目录仅用于存储仓库的历史版本等数据。

此时,客户端就可以进行clone或者remote add此仓库了。

客户端测试连接git远程仓库

客户端,可以新建一个文件夹,初始化一个仓库,然后跟远程服务器上的空仓库建立连接。

# 以下shell代码,纯手写没有验证,如果有错误请自行纠正。
$ mkdir demos && cd demos
$ git init
$ touch a.txt
$ echo 'aicoder.com' >> a.txt$ git add .
$ git commit -m 'the first commit'# 把当前仓库跟远程仓库添映射
$ git remote add origin git@aicoder.com:test.git# 把当前仓库push到远程仓库。
$ git push -u origin master

到此为止,我们就可以尽情的享用git私服了,但是!但是!但是!客户端可以直接ssh登录啊,这是bug,也是不安全的隐患,且看下面怎么禁用git账号的shell登录。

修改Git remote add时使用的远程仓库

方法一:

git remote rm origin
git remote add origin git@github.com:Liutos/foobar.git

方法二:

git remote set-url origin
把替换成新的url地址。

方法三:

直接修改.git/config文件

禁止客户端shell登录

因为前面我们添加了客户端的ssh的公钥到远程服务器,所以客户端可以直接通过shell远程登录服务器,这不安全,也不是我们想要的。且看下面如何禁用shell登录:

第一步:
给 /home/git 下面创建git-shell-commands目录,并把目录的拥有者设置为git账户。可以直接用git账号登录服务器终端操作。

$ su git
$ mkdir /home/git/git-shell-commands

此文件夹是git-shell用到的目录,需要我们手动创建,不然报错:fatal: Interactive git shell is not enabled. hint: ~/git-shell-commands should exist and have read and execute access.

第二步:修改/etc/passwd文件,修改:

$ vim /etc/passwd# 可以通过 vim的正则搜索快速定位到这行,  命名模式下  :/git:x# 找到这句, 注意1000可能是别的数字
git:x:1000:1000::/home/git:/bin/bash# 改为:
git:x:1000:1000::/home/git:/bin/git-shell# 最好不要直接改,可以先复制一行,然后注释掉一行,修改一行,保留原始的,这就是经验!!!
# vim快捷键: 命令模式下:yy复制行, p 粘贴  0光标到行首 $到行尾 x删除一个字符  i进入插入模式 
# 修改完后退出保存:  esc进入命令模式, 输入::wq!   保存退出。

好了,此时我们就不用担心客户端通过shell登录,只允许使用git-shell进行管理git的仓库。

如果有其他小伙伴要连接git服务器,仅需要把他的公钥也添加到authorized_keys即可。

git的自动权限管理:gitolite

如果团队大点的,我们可以用gitolite管理,而且使用很方便。

gitolite的安装和配置

以下配置此承接第5,如果第6步您已经操作,请注意第二步的说明。

第一步:添加gitolite依赖的perl的包

$ yum install 'perl(Data::Dumper)' 

第二步:清空服务器端配置的ssh的公钥

确保:~/.ssh/authorized_keys文件是空的,或者不存在。如果已经存在,建议你把他改名即可,比如:authorized_keys.bak

第三步:上传管理员的客户端的ssh公钥到服务器

把你管理员电脑的ssh的id_rsa.pub文件拷贝到服务器的: $HOME/YourName.pub

YourName可以自定义,最好根据不同伙伴的名字命名。

参考:

# mac客户端
$ scp /Users/fly/.ssh/id_rsa.pub git@aicoder.com:malun.pub

第四步:安装配置gitolite

用git账号登录,并执行如下命令。

# 切换到git账号
$ su git# 进入git主目录
$ cd /home/git# 下载gitolite的仓库
$ git clone https://github.com/sitaramc/gitolite# 创建bin文件夹,必须!!!
$ mkdir -p $HOME/bin# 用下载下来的仓库中的insall执行安装操作,指向的目录就是上一命令行创建的目录
$ ./gitolite二进制/install -to $HOME/bin# 把上传到服务器的 管理员的公钥setup到gitolite中,注意:YourName.pub改成你自己的文件名。
$ ~/bin/gitolite setup -pk ~/YourName.pub# 此时安装配完成后,查看git主目录
$ ls /home/git
drwxr-xr-x   7 git  git  4096 Apr  3 23:50 bin               # 我们创建的存放gitolite二进制
drwxrwxr-x   6 git  git  4096 Apr  3 23:40 gitolite
drwx------   6 git  git  4096 Apr  3 23:52 .gitolite
-rw-------   1 git  git  7130 Apr  3 23:52 .gitolite.rc
-rw-------   1 git  git   398 Apr  3 23:39 malun.pub         # 管理员的公钥
drwxrw----   3 git  git  4096 Apr  3 23:40 .pki
-rw-------   1 git  git    19 Apr  4 00:26 projects.list     # 仓库列表(gitolite自动创建)
drwx------   5 git  git  4096 Apr  4 00:26 repositories      # 存放所有仓库文件夹
drwx------   2 git  git  4096 Apr  4 15:50 .ssh# repositories目录下已经有了两个git仓库了。
# .
# |-- gitolite-admin.git    # 管理配置权限的仓库
# `-- testing.git           # 测试仓库

好了,到此为止,管理员就可以直接把默认的远程管理的仓库gitolite-admin直接clone到本地进行管理git服务了。

第五步:管理员在本地管理和配置服务器端的仓库

下载服务器端的远程管理仓库

# 下载远程管理仓库, 请把aicoder.com换成你自己服务器的域名或者ip
$ git clone git@aicoder.com:gitolite-admin
$ cd gitolite-admin
# 目录结构如下:
# .
# ├── conf                # 配置文件夹
# │   └── gitolite.conf   # 配置权限的文件
# └── keydir              # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下
#     └── malun.pub

gitolite的权限配置

  • 添加其他开发的小伙伴

把小伙伴的公钥发给管理员。管理员添加到gitolite-admin仓库的keydir目录下,注意文件名字格式为username.pub,username就是配置权限时的用户名。

  • 配置用户对仓库的读写权限

直接修改conf文件夹下的,gitolite.conf文件。简单解释下几个用法:

  • repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
  • RW 代表可读可写
  • @all 代表所有人。
  • master和 dev代表分支

参考:

@admin = malun  
@om = malun bcd  repo gitolite-admin  RW+     =   malun repo testing  RW+     =   @all  repo om  RW+     =   @admin  RW+ master = @admin  RW+ dev  =   @om  
  • 应用修改到服务器端

做好配置后,由管理员把修改push到服务器端,会自动处理。

$ git add conf
$ git add keydir
$ git commit -m "added foo, gave access to alice, bob, carol"
$ git push

http://www.ppmy.cn/news/529474.html

相关文章

奇迹MU开服教程篇-单机版

奇迹mu单机版 启动步骤: l.依次启动1~4 2.启动5开始游戏,然后退出游戏 3.就可以使用6 ,就可以修改游戏分辨率了4.7利8,是GM工具,人家自己研究 5.不要玩的时候,退出游戏,然后关闭游戏…

npm 配置私服

通过npm install命令下载前端项目依赖时,每次都需要从淘宝等第三方npm服务器下载,速度慢,耗时长;第三方npm服务器一般不支持包的上传,公司内部开发的公共包只能通过拷贝的方式添加到各个程序员开发的前端项目内&#x…

npm私服搭建

前提 gitnode version > 8.* (推荐: 8.11.4) 使用cnpmjs搭建私服 笔者在centos进行操作 下载cnpmjs.org # 拉取cnpmjs.org git clone https://github.com/cnpm/cnpmjs.org.git # 安装所需依赖包 cd cnpmjs.org && npm install 2.搭建数据库 2.1 搭建mysql # 下…

maven私服nexus上传第三方jar包以及下载

私服是一个特殊的远程仓库,它是架设在局域网内的仓库服务。私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构建的使用,它先从私服请求,如果私服上没有的话,则从外部的远程仓库下载&#xff0…

神鬼传奇客户端-终极优化精简方法

本人的笔记本是IBM的A31 玩神鬼传奇 能玩 但是有些卡!于是花了俩天时间专门研究客户端精简! 自己参考网上的和自己琢磨的方法精简客户端!  现在精简进度80% 了 但是一个人测试太累!在者 完美的文件也不好对应!  特…

传世基本架构-客户端(传世文件格式分析)

传世文件类型格式探讨(一): Wix文件:索引文件,根据索引查找到相应数据地址 (数据文件)。 // WIX 文件头格式 typedef struct tagWIXFILEIMAGEINFO { CHAR szTmp[40]; // 库文件标题 WEMADE Entertainment inc. WIL文件头 INT nIndexCount; // 图片数量 …

命运211月服务器维护,命运2服务端+客户端+工具+教程

步骤: 1、 设置电脑ip 手动修改电脑ip地址为:192.168.10.10(根据自己情况随意,这个就不用说了吧) 1.jpg (82.35 KB, 下载次数: 43) 2012-7-30 01:07 上传 2、 安装设置IIS安装就不说了,直接用iis一键安装(下面有地址)。说下设置 在我们在D盘下建立一个文件件,名字叫WWWR…

《我的世界》Minecraft私服搭建100%成功

最近作者的发小找上作者,闲聊时回忆起每年春节,大家一起在家里组局域网,一起玩《我的世界》的快乐时光,由于去年春节疫情的影响,所以我没有回家过年,也就没有跟往年一样,享受这段美好的开黑时光…