Git服务器搭建与使用

# Git服务器搭建与使用


![Git服务器搭建与使用1](http://o9knzde3g.bkt.clouddn.com/Git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A81.png)




## 前言
>**Git**是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。官网请戳[https://www.git-scm.com](https://www.git-scm.com)。
常用的有几家Git服务提供商
- [GitHub](https://www.github.com),全球最大的代(tong)码(xing)托(jiao)管(you)平台,社区文化好,大牛多,公有库免费,私有库收费
- [Gitee](https://www.gitee.com/),OSChina家的产品,现在国内挺多人用的,公有库、私有库都免费
- [Coding](https://www.coding.net/),公有库、私有库都免费,提供企业版(收费)服务,除了提供代码托管服务,还能发布任务,有点像是Gitee和Tower的结合体


## 环境准备
- 服务器,使用[阿里云](https://www.aliyun.com/),操作系统,`CentOS 7`
- 客户端,安装Git Client,参考官网的[安装指引](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)


## 1 安装Git
```
yum install git
```


## 2 配置用户
创建一个用户git,该用户只是用来进行git相关操作
```
groupadd git
useradd git -d /home/git -g git
```




## 3 Git-协议
>Git 可以使用四种协议来传输数据:本地协议(Local)、HTTP协议、SSH(Secure Shell)协议、Git 协议。各种协议的优劣详见[这里](https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%8D%8F%E8%AE%AE)
### 3.1 SSH协议
查看公钥鉴权文件是否存在
```
cat /home/git/.ssh/authorized_keys
```
如果不存在的话,新建一个
```
cd /home/git/
mkdir .ssh
chmod 755 .ssh
touch .ssh/authorized_keys
chmod 644 .ssh/authorized_keys
```


### <a id="3.2">3.2 生成并配置密钥对</a>
生成一个密钥对
```
ssh-keygen -t rsa -C "fallshum"
```
这里会提示我们,是否修改路径,是否输入密码,使用默认,一路Enter往下走就行
```
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
1d:f1:b6:c9:42:2b:ab:1d:43:5a:72:fc:31:aa:38:9d fallshum
The key's randomart image is:
+--[ RSA 2048]----+
|          .      |
|           o     |
|          o o    |
|       . o = o   |
|      . S * +    |
|       * = +     |
|     ...= .      |
|    ..E+ o       |
|    ..o .        |
+-----------------+


```
把生成的公钥写入`/home/git/.ssh/authorized_keys`,并查看
```
cat /root/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
cat /home/git/.ssh/authorized_keys
```
把私钥放到客户端的.ssh目录下,先获取刚才生成的私钥
```
cat /root/.ssh/id_rsa
```
可以看到类似这样的一个私钥,复制出来
```
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAxtF2MFhb0xbOn2ngtHvWJTM1bW4V/IIBTKzCzTUg9S6tfTqZ
bzVS0qouNWJEOF+phW42Ban5bE9YrpqD3wG36w1fKntGVGXeGkdjiByxzW4wtZpv
gzn9d0o03JlpY3nciwqePfvkykaXDP8Kzg+JolMpxzuc3t4JEMa4nphC1sGrfWeS
IVIY6JxDqhemEkKIfncH44OLg9VslJgx0bL5hKQlkaiAkkI+qfX1XDzISmz6xnif
pzxz9Zwu9/j9GBgBxuD3T5AhnVj5gqjEt7Y4n/V6b/b78KAY9CJDy/nP+oXc4xmF
tdenMH6ZThOdmzwfaQGC4NSJXRK+9Rk8/8JSnQIDAQABAoIBADPERinAV+hWf+Yy
Azf7Jn75HmgnycG9d+km8nHL65DrXnDE2T6De9UuSmnL9EdZYSJE1/wRjcgNwOF1
ifB+2gxxpt3Ay0ceXv4oqFnAXutGTZh7ZZ2dc8mjoK/voeksyafKU/l/pMqmJp5T
qdSNZyDE1pPxiZ7d4S5lD5z7uCuCPELG8ZwGVjFY2xtcaIqfy0kPr5SDmkLDrktI
6Mxo2YFlae8tqvgud9LKZt9R5ubxyftgHf80bVJXVOvKNhN5UYNWssJ6FBt23jjb
pAK6oASATYyITC4a5leqR7vWW3m/wvYiHslouS0vmaxhdOdb4JUafLevmHtYlBZ3
8aGhM2ECgYEA6JQKDijObACWU6DCDKdadq2l0l3RSHOvncStIex/kM9vOgXHZ88d
DNEJB7l639t+Kv956uDr6WY7se7b5H+UVR4Wf8iTe9uexsJLiA/+LMBWEiY/qmE1
3lk4vHwYPWynmEyu/+ZtlNgQzHn0npvktgPCV1Hr/PcXzuxkvnbS+MMCgYEA2tcT
Cb9EJvhcKg/xUzidFtf5SSRu8yezxi+0gydOccuqm8j5jF9jXUZ4IASPpZH3zJRQ
x0SJuOfhhQevuyLI+HD6n3nVEAKc42xSuOYmLrErrbTOHIkwErhtcC05b79EdAbM
JObyA51O2jYCaY/VEny5cSLyYzATbhFn67p10R8CgYAtOdxatISva83PpUsWutRU
j5/XMHcp55UW0M/58Ms9lZjDZ6xG+3dirqNa5S6HqV73bYZ/rg0x7bdd+ly4Kjbl
9lvZrV9Ajoxpig61/qYmfaA/F0D6GL0o56CoxljQWPieHQtKp7xXXUym9nAjB52J
52E7KasCHep7SmysvN55kQKBgELCpAswL0FYOP2X+X3y4nFql6EJnVNOhFhsizwL
jLHIeRanXAHHw89bxR+3ZH8VJaxifrYboYwoKTNlIeYL+ZVZGgv2pdoJggUbMa04
gONzpyiJ5Ortqx2655/2G/SMO/zNag/D6IbTwY9uNJQxjcXjCMuL5rf9nZ/RbYuL
SY/vAoGAGkb/uKGnAhQc+ihcZaZAdZytOTFfEs5692J1rBAhisx1gDCEdkgOp1kH
2mHBwOexAvegb7MUzoRTw5cNYfYCmhkgQg+qOdLDSLvaFGSMNtkdftMif9E88oJ4
9mIblJfi2+GzpBee/I3RP+gxbLa+a83iw7TwQGLjssnjJ2QOsu4=
-----END RSA PRIVATE KEY-----
```
如果是在windows下,进入`C:\Users\myname\.ssh`,路径里面的`myname`是windows登录用户名,然后创建一个文本文档,把私钥复制进去,再把文件名改为`id_rsa`,不要`.txt`的后缀




## 4 初始化Git仓库
初始化一个仓库,将仓库的owner改为刚才创建的用户git,这样用户git就能操作这个仓库了
```
cd /home/git/
git init --bare fallshum.git
chown -R git:git fallshum.git/
```


## 5 客户端克隆仓库
客户端打开Git Bash,clone服务端仓库
```
git clone git@192.168.1.1:/home/git/fallshum.git
```
只要看到`Checking connectivity... done`就说明OK了


## 6 禁用shell登录
如果有需要禁用shell登录的话,执行
```
usermod -s /sbin/nologin git
```
禁用之后,可能出现错误提示`fatal: protocol error: bad line length character: This`
原因及解决办法参考[这里](https://stackoverflow.com/questions/22314298/git-push-results-in-fatal-protocol-error-bad-line-length-character-this)
重新开启,执行
```
usermod -s /bin/bash git
```


## 7 多key管理
ssh在客户端连接服务端的时候,默认使用`~/.ssh/id_rsa`私钥文件。当我们需要连接多个服务端的时候,需要进行多key配置。首先,通过上面[步骤3.2](#3.2)操作,生成了两个密钥对,分别将两个公钥放到对应`服务器`的`~/.ssh/authorized_keys`里面。将私钥文件放到`客户端`的`~/.ssh/`目录下,给两个不同的命名,比如`aliyun_rsa、tengxunyun_rsa`,
在`.ssh`目录下新建`config`文件,配置如下


```
# 配置文件参数
# Host 一个自定义名称,比如叫做aliyun,那么clone仓库的时候,就要用git clone git@aliyun:/home/git/fallshum.git
# HostName 实际要连接的主机地址
# PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
# IdentityFile 指明要使用的identityFile路径,也就是私钥的地址
# User 用户名


# aliyun
Host aliyun
HostName 192.168.1.1
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyun_rsa
User fallshum


# tengxunyun
Host tengxunyun
HostName 192.168.1.1
PreferredAuthentications publickey
IdentityFile ~/.ssh/tengxunyun_rsa
User fallshum
```


配置完成之后,可以在`客户端`用如下指令检验ssh是否配置成功
```
ssh git@aliyun
```
登录成功
![Git服务器搭建与使用2](http://o9knzde3g.bkt.clouddn.com/Git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A82.png)
`exit`退出
![Git服务器搭建与使用3](http://o9knzde3g.bkt.clouddn.com/Git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A83.png)


成功连接上,我们再分别尝试一下clone
```
git clone git@aliyun:/home/git/aliyun.git
git clone git@tengxunyun:/home/git/tengxunyun.git
```
都成功了
![Git服务器搭建与使用4](http://o9knzde3g.bkt.clouddn.com/Git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A84.png)


展开阅读全文

没有更多推荐了,返回首页