本次环境:
- CentOS Linux release 7.2.1511
- Git 1.8.3.1
1.查看是否已安装git
$ rpm -qa git
若已安装,可以用yum remove git 删除。
2.yum安装git
$ yum install -y git
安装成功,查看git版本信息:
$ git --version
3.添加git用户,运行git服务
$ groupadd git
$ adduser git -g git
4.创建ssh认证文件authorized_keys并设置权限
authorized_keys用于存放客户端的ssh key,利用SSH的公钥来完成验证,避免git clone时输入密码。
$ cd /home/git
$ mkdir .ssh
$ chmod 700 .ssh
$ touch .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ cd /home
$ chown -R git:git git
5.Git服务器打开RSA认证
编辑sshd_config文件
$ vi /etc/ssh/sshd_config
如下三项:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
可以看到认证公钥目录正是上面我们创建的/home/git/.ssh/authorized_keys。
6.客户端创建ssh key并保存至服务端authorized_keys文件
(a)windows系统
打开Git Gui,“帮助”—“Show SSH Key”,将id_rsa.pub公钥中的内容保存至服务端authorized_keys文件(多个客户端,每个key一行)。
$ vi /home/git/.ssh/authorized_keys
编辑后保存。
(b)MacOS系统
安装git步骤略。
……
创建一个全球用户名、全球邮箱:
$ git config --global user.name "username"
$ git config --global user.email "youremail@example.com"
cd ~进入根目录
输入命令ssh-keygen
生成ssh-key,如果有提示,一直按回车
$ ssh-keygen
提示已经生成rsa文件到指定目录。
同样,查看id_rsa.pub公钥中的内容,并保存至服务端authorized_keys文件。
7.创建git仓库
为了方便,我们把仓库也放入home目录。
给予git权限。
$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo
初始化该仓库
$ cd gitrepo/
$ git init --bare test_repo.git
提示:初始化空的 Git 版本库于 /home/gitrepo/test_repo.git/。
给予git权限:
$ chown -R git:git test_repo.git
注意:以后每创建一个新的仓库,都要执行这步操作: 修改仓库所属用户为git
8.git clone
现在尝试用git clone刚才新建的test_repo项目:
D:\gitGetTest>git clone git@106.14.224.204:/home/gitrepo/test_repo.git
第一次clone会提示:
The authenticity of host 'xx.xx.xx.xx' can't be established.
ECDSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
输入yes回车即可,后面不会再提示。
可以看到,test_repo项目已经clone至客户端。
9.禁用git用户的shell登录
出于安全考虑,禁止git用户的shell登录,通过编辑/etc/passwd文件完成。
$ vi /etc/passwd
修改
git:x:1000:1001::/home/git:/bin/bash
为
git:x:1000:1001::/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell。
综上,git服务端已经搭建完毕。
10.一些命令
1.查看系统用户组
$ cut -d: -f1 /etc/group
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
2.查看系统用户
$ cut -d: -f1 /etc/passwd
3.clone仓库
$ git clone git@gitServer_ip:/home/gitrepo/sample.git
4.push已有仓库
// 以master分支示范
$ git checkout master
$ git remote rm origin
$ git remote add origin git@gitServer_ip:/home/gitrepo/sample.git
$ git push -u origin master