由于我们在工作中,经常使用git作为代码管理工具,git相比svn等管理工具的诸多优势,在这里就不多做讨论,请自行百度。代码管理,我们肯定是需要一个作为仓库的地方,本文主要介绍一下怎么在私有服务器上搭建git服务
系统环境
- AWS EC2(Ubuntu)
- SSH
- 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 上传到的远程的目录
解释:
- 上文中的
密钥本地地址
是指连接远程服务器的密钥,不是新生成的密钥,用户可以根据ssh连接远程的方式来自行设置是否需要密钥 要上传的文件(夹)路径
是指上一步生成的公钥的文件远程用户
是指你登陆远程ssh的账户ip
地址是指远程服务器的地址上传的远程目录
是指上传到远程服务器的目录地址
好了,以上就是所有的准备工作,接下来我们要将上传的公钥变成用户可以使用的公钥
生成可以识别的密钥文件(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.