今天刚从阿里云买了一台云服务,搭建了一个svn,后来发现代码不能同时上传两个服务器的svn,于是乎就起了搭一个git库的想法。
经过一天的反复琢磨,总算是搭起来了,下面分享一下流程和我遇到的一些问题:
PS:接下来的命令我都是在root权限输入的,所以没有加sudo,用普通用户登录服务器的同学注意一下。
1.安装git
我的服务器是乌班图14.04版本,直接用apt-get就可以安装了,上命令:
apt-get install git
由于我新买的服务器,在安装过程中遇到了404的错误,这是因为刚买的服务器,可能是库里没有这个包,需要更新一下源文件,update一下就好了,上命令:
apt-get update
更新完之后顺利完成安装。
2.创建一个git仓库
git安装完成后,该创建一个远程仓库了,在/home/git 目录下创建一个空git仓库,名字随便起,但后面一定要加上.git,命令:
git init --bare myrepertory.git
命令敲完后会提示你创建了一个空的git仓库,这样仓库就创建好了。
3.创建一个git账户
git有了,仓库也有了,接下来需要一个账号可以访问git服务器(不能用root账户,root权限太高了),所以需要在Linux下创建一个git专用账户,这也很简单,一句命令就完事:
adduser git
4.配置ssh
因为你要上传代码或者clone代码,需要远程连接服务器,所以需要一系列的ssh配置,让你使用的这个客户端可以不用密码访问git服务器,在这一步骤中有两个角色,一个是git服务器,一个是你日常敲代码用的服务器(下文用‘代码服务器’表示)。
1. 首先,一般的Linux都会自带ssh的相关软件,没有装的话 apt-get 一下就行了。
2. 然后找到你创建的git用户所在的目录(注意是git账户,不是git库),看看是否有.ssh文件夹,如果没有就创建一个新的.ssh文件夹,并在这个文件夹下新建一个叫authorized_keys 的文件,上命令:
mkdir .ssh
touch authorized_keys
3. authorized_keys这个文件是用来储存代码服务器的ssh公钥的,这样git服务器可以判断外来链接是否需要认证。当然,这个秘钥也是需要手动生成的(在代码服务器端),在生成秘钥之前需要去/root/.ssh目录下看下是否有id_rsa 和id_rsa.pub这两个文件,如果存在的话就不需要在生成了,因为已经存在了,直接将id_rsa.pub打开,复制里面的内容到上一步骤中创建的authorized_keys中就可以了。如果目录下没有这两个文件,就执行一条命令,然后狂按回车就ok了。上命令:
ssh-keygen -t rsa
4. 创建好秘钥,找到秘钥位置(/root/.ssh/id_rsa.pub),查看秘钥把里面内容(全部)复制到步骤二中创建的authorized_keys中,注意:一行一个秘钥。查看命令:
cat id_rsa.pub
5.设置git账户权限
之前的步骤是的git账户可以不用密码直接登录服务器,这也意味着可以不用密码登录shell,出于安全性考虑,限制git账户的登录权限,只能让他使用ssh。更改用户权限的文件在/etc/passwd,找到它并找到类似下面的一行:
git:x:1000:1000:1,1,1,1,1:/home/git:/bin/bash
将他改成
git:x:1000:1000:1,1,1,1,1:/home/git:/usr/bin/git-shell
就ok啦。
6.测试
git服务器算是搭好了,我测试了一下,还是发现了个问题,我在另一台云服务器上克隆一个文件,命令:
git clone git@host:/home/git/myrepertory.git
还是需要输入密码,于是百度了一下,是ssh配置的问题,在/etc/ssh/sshd_config文件中,将这几个属性改下就解决了:
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
改完重启一下,就万事大吉了。
还有一个问题需要注意一下,在创建完git库之后要记得把git库的权限给到git账户,如果还是root账户的话,在提交代码的时候会报错导致上传失败。查看权限以及更改权限的命令:
ls -la #此处需要进入git库的上级目录查看权限
chown -R git:git myrepertory.git(你创建的git库位置)
上一张报错的图片,苦逼的找了半天解决办法: