搭建git服务器以及利用SSH免密码clone

一、git的安装

服务器端

1.查看 yum 源仓库的 Git 信息

# yum info git

可以看出,截至目前,yum 源仓库中最新的 Git 版本才 1.8,而查看最新的 Git 发布版本,已经 2.9.2 了。

2. 依赖库安装

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# yum install gcc perl-ExtUtils-MakeMaker

3. 卸载低版本的 Git

通过命令:git –-version查看系统带的版本,Git 版本是:1.8.3.1,所以先要卸载低版本的 Git,命令:

# yum remove git

4. 下载新版的 Git 源码包(我放在 /usr/local/git 的目录下了,git是我自己建的目录)

# cd /usr/local

# mkdir git

# cd git

在线下载最新的源码包

# wget https://github.com/git/git/archive/v2.9.2.tar.gz

5. 解压当前目录

# tar -xzvf v2.9.2.tar.gz

6. 安装 Git

执行以下命令进行编译安装。

# cd git-2.9.2

# make prefix=/usr/local/git all

# make prefix=/usr/local/git install

7. 添加到环境变量

# vim /etc/profile

如果没有vim,则安装vim工具

# yum install vim #若有vim可忽略此行

在空白行增添

# export PATH="/usr/local/git/bin:$PATH"

使配置立即生效

# source /etc/profile

8. 查看版本号

# git --version

git version 2.9.2

9.将git设置为默认路径,不然后面克隆时会报错

$ ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack

$ ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack

至此,CentOS 就安装上了最新版本的 Git。

二、创建git用户组和用户,用来运行git服务

服务器端

$ groupadd git

$ useradd git -g git

$ passwd git#参数是用户名

切换到git用户

$ su - git

三、创建公钥

本地

1.配置查看

$ git config --lis

用户名和邮箱,如果已填写过则PASS

$ git config --global user.name "username"

若想修改用户名或邮箱

$git config --global --replace-all user.email "输入你的邮箱"

$git config --global --replace-all user.name "输入你的用户名"

然后再查看下

$git config --list

发现修改成功了

2.生成SSH密钥

执行后,

第一个提示输入保存文件名,默认为空,回车。

第二个提示输入密钥,默认为空,回车

第三个确认刚输入密钥,默认为空,回车

完成后,默认保存位置当前用户名下/.ssh/id_rsa 和id_rsa.pub

id_rsa 私钥

id_rsa.pub公钥

待会需要把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个马上回到服务器端

四、设置权限

服务器端

$ cd /home/git/

$ mkdir .ssh #新建文件夹

$ chmod 700 .ssh

$ touch .ssh/authorized_keys#新建文件

$ chmod 600 .ssh/authorized_keys#权限只归用户,去除无关用户的权限

重要重要重要

$ cd home

$ chown -R git:git git#设置git文件夹所有用户归git用户

切记否则clone依旧需要输入密码

添加证书之前,还要做这么一步:Git服务器打开RSA认证

$ vim /etc/ssh/sshd_config

即:

1.RSAAuthentication yes

2.PubkeyAuthentication yes

3.AuthorizedKeysFile home/git/.ssh/authorized_keys

这里我们可以看到公钥存放在home/git/.ssh/authorized_keys文件中。

所以我们在/home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥导入进去。

然后再次clone的时候,或者是之后push的时候,就不需要再输入密码了

把本地的id_rsa.pub文件内容复制到服务器断的/home/git/.ssh/authorized_keys里面

五、初始化Git仓库

服务器端

$ cd /home/git

$ git init --bare test.git

Initialized empty Git repository in /home/git/test.git/

把仓库所属用户改为git

chown -R git:git test.git

以后每创建一个新的仓库,记得这步操作:修改仓库所属用户为git

六、克隆服务器仓库

本地

$ git clone git@your-ip:/home/git/test.git

Cloning into 'test'...

warning: You appear to have cloned an empty repository.

Checking connectivity... done.

七、禁止Shell登录

服务器端

出于安全考虑,git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。

找到类似下面的一行:

git:x:502:502::/home/git:/bin/bash

改为

git:x:502:502::/home/git:/usr/local/git/bin/git-shell

git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出

单独提出来,防止导入公钥后clone依旧需要输入密码

1.权限问题

服务器端

$ cd /home/git/

$ mkdir .ssh #新建文件夹

$ chmod 700 .ssh

$ touch .ssh/authorized_keys#新建文件

$ chmod 600 .ssh/authorized_keys#权限只归用户,去除无关用户的权限

2.文件夹和文件要归属于git用户,否则无法访问git仓库

服务器端

git文件夹归属git账户

$ cd home

$ chown -R git:git git#设置git文件夹所有用户归git用户

仓库权限归属git用户

$ cd /home/git

$ git init --bare test.git

Initialized empty Git repository in /home/git/test.git/

把仓库所属用户改为git

chown -R git:git test.git

以后每创建一个新的仓库,记得这步操作:修改仓库所属用户为git

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180305G0H7J500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券