文章目录
Linux下搭建简易git服务器
以centos7.2为例的详细教程
作为一个分布式版本控制系统,git在一台机器上存在原始版本库的基础上,其他的机器可以对原始版本库进行“克隆”和备份。于是,在通常的应用中,往往个人、一个项目组乃至一家企业会搭建一个服务器,长期运行,各人向服务器提交修改并从服务器获取同步。
对于这样的服务器,我们一般有以下的三种选择:
- 使用现有的Github远程仓库:github提供免费/付费的仓库托管服务,使用比较方便,但有一个缺点。在免费情况下大家,虽然修改仓库的权利在自己手上,但是可以公开浏览。这里我们就不叙述,日后会攥写详细的教程。
- 使用开源软件Gitlab:gitlab是一款利用ruby on rails的开源版本管理系统,可以实现自托管的git项目仓库,并通过web界面进行管理。并且形式和内容非常与github相似。但是在拥有私有化功能的前提下,最低需要1Ghz cpu和1G RAM+swap的配置要求让不少个人和小团队望而却步(实际上这样的配置也比较卡),日后也会撰写相关教程。
- 搭建一台简易的Git服务器:推荐有私有需求个人和小型团队使用,需要准备一台运行Linux的机器,配置要求512M乃至256M的内存都非常充足。国内常用的ubuntu、debian以及Centos都是比较好的选择,并且他们都提供了比较简便的安装方式。
Debian和ubuntu下安装比较简单,大家可以参考廖雪峰的相关教程:
笔者的运行环境是centos7.2,相比前两者多了几个步骤。并且这里假设你已经切换到root账户。没有切换也没有关系,有sudo
权限的用户账户可以在每条命令前加sudo
+空格
,例如 yum install -y git
需要改写为sudo yum install -y git
ps:查看、修改或者执行某些命令需要root用户的权限,如果不想直接切换到root用户,就可以使用sudo
命令。sudo
命令用于针对单个命令授予临时权限。sudo
仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性。
下面正式开始我们的教程:
第一步,安装git:
1 2 |
yum install -y git |
Yum
是centos下最常用的安装包管理器之一。这里-y
参数表示将在安装中默认选择是的提示。安装中将会检查是否已经安装,不会出现重复安装。
第二步,创建一个git用户,用来运行git服务:
1 2 |
useradd -d /home/git -g git git |
-d
参数表示用户主目录的位置,对于xxx用户默认创建在/home/xxx
之下;-g
表示创建的用户所在的用户组,默认创建一个git用户组。这里的指令等价于# useradd git
。
1 2 |
passwd git |
passwd
用于修改密码,会提示输入两次git用户的密码,由于怕别人观察到密码位数,不会有*
回馈,输入完回车
即可。
第三步,创建证书登陆:
为了保证安全,我们采用ssh的方式连接。我们收集所有需要登录的用户的公钥,即用户主目录的子目录/.ssh/
内(linux下root用户的~/.ssh/
或windows用户git bash的/c/user/yourname/.ssh
)id_rsa.pub
文件的内容,复制后将其添加到/home/git/.ssh/authorized_keys
文件内,一行添加一个。
可以使用vim
/vi
打开:
1 2 |
vim yourhomedir/.ssh/authorized_keys |
把yourhomedir
替换成你的主目录,vim文本编辑器打开后默认处于控制模式,需要按I
进入编辑模式(insert mode),在已有内容末尾另起一行,按组合键shift
+insert
复制剪贴板中内容,按esc
退回控制模式,输入:
w
q
写入并离开(:
q
!
是不保存修改并离开)。如果没有这个文件,vi
/vim
会自动创建。
也可以手动创建目录,创建文件,最后编辑
1 2 |
mkdir yourhomedir/.ssh/ |
mkdir
指令用于创建目录,把yourhomedir
替换成你的主目录。
1 2 |
cd yourhomedir/.ssh/ |
cd
用于切换目录,把yourhomedir
替换成你的主目录。
1 2 |
touch authorized_keys |
touch
用于创建文件
Ps:没有相应密钥对但需要登录的用户创建密钥对的方法:
创建ssh的key:
1 2 |
ssh-keygen -t rsa -C "youremail@example.com" |
把邮件地址换成你的邮件地址,使用回车
一路默认值。这时候你会发现在你的用户主目录里可以找到子目录.ssh
,切换到目录内,可以看到id_rsa
和id_rsa.pub
两个文件:
1 2 |
ls |
ls
命令用于显示当前目录下文件和目录,加-a
参数可以显示隐藏文件和目录。
这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉需要方。
第四步,初始化git仓库
先选定一个目录作为git仓库,不妨设/gitlib/sample.git
(注意,服务器仓库一般以.git
结尾)在上一级目录,此处为/gitlib/
目录下输入命令:
1 2 |
git init –bare sample.git |
git就会在指定位置创建一个裸仓库,即没有工作区的仓库。
第五步,配置git-shell-commands
将目录/usr/share/doc/git/contrib/git-shell-commands
拷贝到git用户下/home/git/
,这里/usr/share/doc/git
的git
可能带版本号,要自行修改:
1 2 |
cp -R /usr/share/doc/git-x.x.x.x/contrib/git-shell-commands /home/git/ |
第六步,修改权限即所有者
修改服务器创建的的所有者
1 2 3 |
chown -R git:git /gitlib/sample.git chown -R git:git /home/git/.ssh/ |
chown
指令用于修改所有者,-R
参数表示递归的修改所有子文件和目录,冒号前表示用户,冒号后表示用户组。
修改权限:
1 2 3 4 5 |
chmod 755 /home/git chmod 700 /home/git/.ssh/ chmod 600 /home/git/.ssh/authorized_keys chmod +x /home/git/git-shell-commands/* |
chmod
指令用于修改文件或目录的访问权限
第七步(可选),禁用git用户的shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
1 2 |
git:x:1001:1001:,,,:/home/git:/bin/bash |
改为:
1 2 |
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell |
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
ps:这一部分搬运自廖大的教程。
第八步,克隆远程仓库
1 2 |
git clone git@yourdomain:/gitlib/sample.git |
将 yourdomain
替换为你的主机地址或ip
如果克隆成功将会出现:
Cloning into ‘sample’…
warning: You appear to have cloned an empty repository.[/shell]
如果不成功且出现
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
的错误提示的解决方法:
1,检查公钥有否输入错误
2,修改 sshd_config
内容
1 2 |
vim /etc/ssh/sshd_config |
1 2 3 4 5 |
HostKey /etc/ssh/ssh_host_rsa_key RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys |
3,重新进行第六步权限修改