最近入了台阿里云服务器,就学了学搭建一个Git服务器,其实也挺简单的,不过中途还是遇到了一些小问题
首先服务器系统版本为Ubuntu16.04,如果用Centos版本的同学也可以看看以下总结,相信自己也能动手完成:
- 如果没有安装ssh的先安装ssh
- 安装git
- 添加git用户
- 创建证书
- 初始化Git仓库
- 禁用shell登录
- git clone开始玩耍
1.安装SSH
查看是否安装ssh,可以使用命令 whereis ssh
查看ssh服务是否启动,可以使用命令 netstat -tl 如果出现 tcp 0 0 *:ssh *:* LISTEN 字样即服务已启动或者查看进程ps -ef | grep ssh
安装ssh:
sudo apt-get install openssh-server
2.安装git
sudo apt-get install git
3. 添加git用户
sudo adduser git
4.创建证书
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。将用户公钥传到服务器可使用scp命令,然后用cat命令追加到authorized_keys文件中。
注意这里,如果你登录的不是git用户,那么你需要知道cd ~/.ssh/authorized_keys文件不是git用户下的文件不然后面操作你都会发现需要密码登录,如何你还配置了git用户禁止shell登录,那么会提示这句报错:
Could not read from remote repository,而这其实是你没有把公钥添加到正确的文件中,是
/home/git/.ssh/authorized_keys文件。注意,这些文件的 owner 都是第三步创建的用户git。
5.初始化Git仓库
选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
sudo git init --bare sample.git
Git会创建一个裸仓库并且以.git结尾,然后把owner改为git
sudo chown -R git:git sample.git
6.禁用shell登录
出于安全考虑,创建的git用户不允许登录shell,可以通过编辑 /etc/passwd 文件完成,找到类似这一行
git:x:1000:1000:git,git,git,git,git:/home/git:/bin/bash
修改为:
git:x:1000:1000:git,git,git,git,git:/home/git:/usr/bin/git-shell
7.git clone开始玩耍
现在就可以用git clone 命令来克隆远程仓库啦
$ git clone git@x.x.x.x:/srv/sample.git
Cloning into 'sample'...
The authenticity of host 'x.x.x.x (x.x.x.x)' can't be established.
ECDSA key fingerprint is SHA256:FqGc7eI0pOiaARjsJ/sfg+byytKKFCAlJCTkSp6zGvU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '39.108.55.42' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.
注意 x.x.x.x就是你的ip或者是你的域名,:后面就是你的仓库位置了
如果你提交到空仓库出现下面报错:
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: 无法推送一些引用到 'git@x.x.x.x:/srv/sample.git'
可以使用下面命令强制提交
git push -u -f origin master
后面你就可以自由玩耍啦