文章目录
  1. 1.免费的 Git 托管平台
    1. 1.1 GitHub
    2. 1.2 Gitlab
    3. 1.3 国内托管平台
  2. 2 安装服务器
    1. 2.1 访问原理【重要】
    2. 2.2 安装 openssh-server
    3. 2.2 安装 Git
    4. 2.3 创建 Git 用户
    5. 2.4 建立仓库
  3. 3 公钥认证方式
    1. 3.1 准备密钥对(只需操作一次)
    2. 3.2 禁止公钥之外的所有认证方式(只需操作一次)
    3. 3.3 服务端配置公钥(涉及的用户逐一配置)
    4. 3.4 客户端配置公钥(git/ssh)
    5. 3.5 客户端配置公钥(SecureCRT)
  4. 4 客户端克隆
    1. 4.1 确认是否连接指定主机
    2. 4.2 用户认证
    3. 4.3 执行 Git 操作

Github 只对开源的项目免费,非开源项目必须付费。为了不付费,也为了代码安全,我们需要搭建自己的 Git 服务器,而且国内访问速度更快。Git 的远程仓库和本地仓库没有本质区别,远程仓库只是保证永远在运行。

作者:王克锋
出处:https://kefeng.wang/2018/01/20/git-server/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1.免费的 Git 托管平台

1.1 GitHub

收费模式:对开源免费托管,对非开源要收费。
开源项目的首选。

1.2 Gitlab

维基百科: https://zh.wikipedia.org/wiki/Gitlab
GitLab是一个基于 Web 的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。GitLab 由 GitLab Inc. 开发,使用开源许可证。
GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发。它由 Ruby/Go 写成。
GitLab被 IBM,Sony,NASA,Alibaba,Invincea,SpaceX 等组织使用。

1.3 国内托管平台

  • Oschina:开源中国代码托管平台是基于 GitLab 项目搭建。
  • Coding
  • CSDN

2 安装服务器

2.1 访问原理【重要】

客户端访问 git@centos:/home/git/repo/project.git 时,内部原理是:

  • 通过 ssh 协议,以用户 git(@前面的内容) 连接主机 centos,相当于命令 ssh git@centos
  • 然后访问目录 /home/git/repo/project.git

2.2 安装 openssh-server

由于是通过 ssh 访问,所以服务器上必须安装并启用 ssh 服务。

1
sudo yum -y install openssh-server

2.2 安装 Git

1
sudo yum -y install git

2.3 创建 Git 用户

1
2
3
sudo adduser git
sudo passwd git
sudo su - git

2.4 建立仓库

1
2
3
mkdir /home/git/repo ## 仓库总目录
cd /home/git/repo
git init --bare project.git ## 特定项目

3 公钥认证方式

初始情况下,没有配置公钥认证,是以明文密码方式登录。

3.1 准备密钥对(只需操作一次)

如果尚无密钥对(私钥文件 id_rsa,公钥文件 id_rsa.pub),则手工生成:

1
2
3
4
## 其中 -P(Passphrase) 和 -f(Output file) 都必须指定,否则会要求输入。
mkdir %USERPROFILE%\.ssh
"C:\Program Files\Git\usr\bin\ssh-keygen.exe" -t rsa -C "test@gmail.com" -P "" -f %USERPROFILE%\.ssh\id_rsa
## 会在目录 %USERPROFILE%\.ssh 下生成公钥/私钥文件 id_rsa/id_rsa.pub

3.2 禁止公钥之外的所有认证方式(只需操作一次)

1
2
3
4
5
6
7
## sudo vim /etc/ssh/sshd_config
UsePAM no ## 【PAM】认证方式
RSAAuthentication no ## 【RSA】认证方式,default=yes
PasswordAuthentication no ## 【明文密码】认证方式, default=yes
ChallengeResponseAuthentication no ## 尝试所有认证方式

PubkeyAuthentication yes ## 【公钥】认证方式, default=yes

修改并保存文件后,重启服务以生效 sudo service sshd restart

3.3 服务端配置公钥(涉及的用户逐一配置)

要登录哪个用户(git 或 root),就要把信任的客户端的公钥内容(id_rsa.pub),追加至该用户目录下文件 .ssh/authorized_keys 中。

1
2
3
4
5
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
touch $HOME/.ssh/authorized_keys
chmod 600 $HOME/.ssh/authorized_keys
cat id_rsa.pub >> $HOME/.ssh/authorized_keys

3.4 客户端配置公钥(git/ssh)

这里所说的 ssh,包括 Linux 下的 ssh,也包括 Windows 下的 C:\Program Files\Git\usr\bin\ssh.exe
把前面准备好的【私钥文件】id_rsa,复制至文件 %USERPROFILE%\.ssh\id_rsa

如果在 TortoiseGit 中 pull/push 操作时报错 No supported authentication methods available
则调整其设置(TortoiseGit / Settings / Network) SSH client 的值,
原值 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
新值 C:\Program Files\Git\usr\bin\ssh.exe

3.5 客户端配置公钥(SecureCRT)

菜单:选项 / 全局选项 / SSH2,指定【公钥文件】 %USERPROFILE%\.ssh\id_rsa.pub
菜单:选项 / 全局选项 / SSH 主机密钥,维护已有密钥

4 客户端克隆

参考文章 Git 客户端的安装与使用
客户端执行克隆命令 git clone git@centos:/home/git/repo/project.git 时,会有以下两步:

4.1 确认是否连接指定主机

如果尚未连接过此主机,会询问是否确认连接;
确认连接时会把该主机的“域名、地址、指纹”列入文件 %USERPROFILE%\.ssh\known_hosts

1
2
3
4
5
The authenticity of host 'centos (192.168.126.128)' can't be established.
ECDSA key fingerprint is SHA256:csmkULq5gk7O2SlNSkSwnAq2YMMDOWElv52tiiCx/t0.
Are you sure you want to continue connecting (yes/no)? yes
### 输入 yes,会显示下面消息:
Warning: Permanently added 'centos,192.168.126.128' (ECDSA) to the list of known hosts.

4.2 用户认证

  • 如果没有配置公钥认证方式,则要求登录用户 git@centos 的密码;
  • 如果配置了公钥认证方式,则通过公钥检查匹配,无需输入密码。

4.3 执行 Git 操作

用户认证通过后,执行 Git 操作,比如克隆。

文章目录
  1. 1.免费的 Git 托管平台
    1. 1.1 GitHub
    2. 1.2 Gitlab
    3. 1.3 国内托管平台
  2. 2 安装服务器
    1. 2.1 访问原理【重要】
    2. 2.2 安装 openssh-server
    3. 2.2 安装 Git
    4. 2.3 创建 Git 用户
    5. 2.4 建立仓库
  3. 3 公钥认证方式
    1. 3.1 准备密钥对(只需操作一次)
    2. 3.2 禁止公钥之外的所有认证方式(只需操作一次)
    3. 3.3 服务端配置公钥(涉及的用户逐一配置)
    4. 3.4 客户端配置公钥(git/ssh)
    5. 3.5 客户端配置公钥(SecureCRT)
  4. 4 客户端克隆
    1. 4.1 确认是否连接指定主机
    2. 4.2 用户认证
    3. 4.3 执行 Git 操作