由于在github的共有仓库存放代码是开源的 , 所以有些需要保密的代码不方便存放在github上 , 而购买github的私有仓库的话 , 又好像没必要 , 因此使用自己的服务器搭建一个Git服务器 , 用于实现代码托管.
1.远程登录到Ubuntu服务器
1.1设置远程请查看: Ubuntu16.04下设置远程登录
1.2输入sudo su
, 回车 , 输入登录密码 , 切换到root
poorguy@ubuntu:~$ sudo su
[sudo] password for poorguy:
root@ubuntu:/home/poorguy#
2.安装Git
2.1安装git:
root@ubuntu:/home/poorguy# apt-get install git
2.2配置git , 配置完后 , git config --list
可以查看配置信息
root@ubuntu:/home/git# git config --global user.name "your name"
root@ubuntu:/home/git# git config --global user.email "your email"
root@ubuntu:/home/git# git config --list
user.name=your name
user.email=your email
root@ubuntu:/home/git#
3.创建git用户
3.1创建一个git的用户(该用户是服务器的用户) , 用于运行git服务:
期间要输入两次新增的git用户的登录密码 , 还有git用户的相关信息 , 可以使用默认的 , 直接回车即可
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
Full Name []: git
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
3.2切换到/home
目录下 , 可以看到 , 新增了一个git
文件夹 , 这就是刚刚创建的git
用户
root@ubuntu:/home/poorguy# cd ..
root@ubuntu:/home# ls
git poorguy ScatterDemo
root@ubuntu:/home#
3.3修改/home/git
的权限
root@ubuntu:/home/poorguy# chmod 755 /home/git
4.在git用户下添加SSH信任
4.1使用su git
切换到git
用户
root@ubuntu:/home/poorguy# su git
git@ubuntu:/home/poorguy$
4.2在/home/git
目录下创建.ssh
文件夹 , 并设置读写权限 , 700
的意思是 只有拥有者有读 , 写 , 执行权限
git@ubuntu:~$ mkdir .ssh && chmod 700
4.3在.ssh
目录下 , 创建authorized_keys
文件 , 并设置读写权限 , 600
的意思是只有拥有者有读 , 写权限
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
把要连接Git服务器的PC(比如你的笔记本)中的公钥 , 这个文件就是在C:\Users\Administrator\.ssh
的id_ras.pub
文件 , 把该文件复制到/home/git/.ssh
目录下 , 然后将id_rsa.pub
文件追加到authorized_keys
文件中:
git@ubuntu:~/.ssh$ ls
authorized_keys id_rsa.pub
git@ubuntu:~/.ssh$ cat id_rsa.pub >> authorized_keys
git@ubuntu:~/.ssh$
5.在git用户下搭建git仓库
5.1在/home/git
目录下 , 新建一个GitProjectPlace
文件夹 , 用于存放所有的项目 , 然后在该目录下新建一个testProject.git
文件夹 , 用于测试.
git@ubuntu:~$ mkdir GitProjecPlace
git@ubuntu:~$ cd GitProjecPlace/
git@ubuntu:~/GitProjecPlace$ mkdir testProject.git
git@ubuntu:~/GitProjecPlace$ cd testProject.git/
git@ubuntu:~/GitProjecPlace/testProject.git$ git init --bare
Initialized empty Git repository in /home/git/GitProjecPlace/testProject.git/
git@ubuntu:~/GitProjecPlace/testProject.git$
5.2修改git仓库的所属者
git@ubuntu:~/GitProjecPlace$ chown -R git:git testProject.git
6.克隆仓库到本地
6.1在本地电脑(确认已经安装git环境
)中 , 切换到工作目录 , 使用git bash
打开 , 执行以下命令:
Administrator@2013-20160515XD MINGW64 /e/fry_work/PoorGuy/GitVir
$ git clone git@192.168.74.128:/home/git/GitProjecPlace/testProject.git
Cloning into 'testProject'...
Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
会有提示说 , 这是一个空的仓库.接下来 , 就可以往仓库上传代码了.
7.限制Git用户使用SSH远程登录服务器
由于将id_rsa.pub
添加到了authorized_keys
中 , 所以被添加的开发者是可以通过SSH
远程登录到服务器的 , 可是开发者应该只能拥有pull
或push
, 而不能被允许直接登录服务器 , 这样会有一定的风险 , 所以要限制通过SSH
登录服务器.方法就是将git
用户的shell
换成git-shell
, git-shell
能够限制开发者只能通过SSH
进行pull , push
等与git
相关的操作.
7.1使用cat /etc/shells
查看git-shell
是否已经存在shells
文件中
root@ubuntu:/etc# cat shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
root@ubuntu:/etc#
7.2如果现在git-shell
不存在shells
中 , 使用which git-shell
查看git-shell
的安装位置 , 一般在/usr/bin/git-shell
中
root@ubuntu:/etc# which git-shell
/usr/bin/git-shell
root@ubuntu:/etc#
7.3使用vim shells
, 将git-shell
的安装路径添加进shell
文件中
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/git-shell
7.4将shell
换成git-shell
root@ubuntu:/etc# sudo chsh git -s $(which git-shell)
root@ubuntu:/etc#
7.5在本地使用SSH
远程登录测试是否能够登录
$ ssh git@192.168.74.128
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.74.128 closed.
# 服务器禁止登录
至此 , 一个私人的Git服务器就大致搭建完成了.
You only get one life , it`s actually your duty to live it as fully as possible.
生命只有一次 , 你有责任让它活出精彩.