搭建私有git服务

介绍在amazon云上部署git服务

由于我们在工作中,经常使用git作为代码管理工具,git相比svn等管理工具的诸多优势,在这里就不多做讨论,请自行百度。代码管理,我们肯定是需要一个作为仓库的地方,本文主要介绍一下怎么在私有服务器上搭建git服务

系统环境

  1. AWS EC2(Ubuntu)
  2. SSH
  3. git

解释
(Remote) 代表操作在远程服务器
(Local) 代表在本地操作

安装git(Remote)

AWS EC2(Ubuntu)上默认安装了git,如果没有安装,参照如下:

sudo apt-get update
sudo apt-get install git

添加git用户(Remote)

在AWS EC2(Ubuntu)上添加git用户

sudo useradd -m git   #添加git用户,名称可以自己设置,不一定要用git
sudo passwd git   #修改git密码

git用户主目录为/home/git/

生成密钥(Local)

在本机子上生成一对密钥

ssh-keygen -t RSA -C "git"    #使用RSA加密,密钥备注

回车后下一步下一步,其中会询问你是否输入私钥的密码,如果输入也可以,如果不输入直接回车即可

Generating public/private rsa key pair.
Enter file in which to save the key (/home/eggsy/.ssh/id_rsa):  #输入密钥文件名称
Enter passphrase (empty for no passphrase):   #输入私钥的密码
Enter same passphrase again:  #重复输入私钥的密码

然后会在当前目录生成一个密钥对

将密钥上传到远程服务器(Local)

scp -i ~/.ssh/eggsy.pem -r git_amazon.pub ubuntu@54.13.87.93:/home/ubuntu/
       密钥本地地址        要上传的文件(夹)路径 远程用户 IP     上传到的远程的目录

解释:

  1. 上文中的密钥本地地址是指连接远程服务器的密钥,不是新生成的密钥,用户可以根据ssh连接远程的方式来自行设置是否需要密钥
  2. 要上传的文件(夹)路径是指上一步生成的公钥的文件
  3. 远程用户是指你登陆远程ssh的账户
  4. ip地址是指远程服务器的地址
  5. 上传的远程目录是指上传到远程服务器的目录地址

好了,以上就是所有的准备工作,接下来我们要将上传的公钥变成用户可以使用的公钥

生成可以识别的密钥文件(Remote)

cd ~  #切换到git主目录
mkdir .ssh  #生成.ssh目录用来存放公钥
sudo cat /home/ubuntu/git_amazon.pub >> /home/git/.ssh/authorized_keys  #将上传的公钥内容,追加到authorized_keys文件中去,用于识别登陆用户
sudo chown -R git:git /home/git/.ssh  #设置目录和目录下的authorized_keys文件的拥有者和群组

测试是否可以远程登陆(Local)

ssh -i ~/.ssh/git_amazon git@54.13.87.93

初始化git仓库(Remote)

sudo git init --bare project.git  #project你可以自己指定仓库名称,基础仓库以.git结尾
sudo chown -R git:git project.git
sudo chmod -R 755 peoject.git

验证(Local)

git clone git@54.13.87.93:/home/git/peoject.git

如果成功,会拉取到一个空的仓库

Cloning into 'project'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

自此,一个git私有仓库就搭建好了

附录

额外指定key来访问远程仓库(Local)

vim ~/.ssh/config

输入

Host 你喜欢的名字,如gs
Hostname 亚马逊PUBLIC DNS
User git
IdentityFile C:/Users/test/.ssh/id_rsa #你的私钥路径
IdentitiesOnly 这个配置yes,表示只使用这里的key,防止使用默认的

关闭git用户的ssh shell登陆(Remote)

vim /etc/passwd

找到git用户,在最后添加

/usr/bin/git-shell

结果如下:

git:x:1001:1001::/home/git:/usr/bin/git-shell

这时候就不能通过shell使用git账号登陆

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 54.13.87.93 closed.