{{< details >}}

  1. Tier: 基础版, 专业版, 旗舰版
  2. Offering: 私有化部署

{{< /details >}}

极狐GitLab 的 Git 协议 v2 在多个方面改进了 v1 有线协议,并且在 HTTP 请求中默认启用。要启用 SSH,管理员需要进行额外的配置。

前提条件

从客户端来看,必须安装 git v2.18.0 或更新版本。

从服务器端来看,如果我们想配置 SSH,我们需要设置 sshd 服务器以接受 GIT_PROTOCOL 环境。

在使用 极狐GitLab Helm ChartsAll-in-one Docker 镜像 的安装中,SSH 服务已经配置为接受 GIT_PROTOCOL 环境。用户无需做任何额外的事情。

对于从 Linux 软件包或自编译安装的安装,请手动更新服务器的 SSH 配置,在 /etc/ssh/sshd_config 文件中添加以下行:

AcceptEnv GIT_PROTOCOL

配置 SSH 守护程序后,重启它以使更改生效:

# CentOS 6 / RHEL 6
sudo service sshd restart

# 所有其他支持的发行版
sudo systemctl restart ssh

说明

要使用新协议,客户端需要将配置 -c protocol.version=2 传递给 Git 命令,或全局设置它:

git config --global protocol.version 2

HTTP 连接

验证客户端使用 Git v2:

GIT_TRACE_CURL=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | grep Git-Protocol

您应该看到发送了 Git-Protocol 标头:

16:29:44.577888 http.c:657              => Send header: Git-Protocol: version=2

验证服务器使用 Git v2:

GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | head

使用 Git 协议 v2 的示例响应:

$ GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote https://your-gitlab-instance.com/group/repo.git 2>&1 | head
10:42:50.574485 pkt-line.c:80           packet:          git< # service=git-upload-pack
10:42:50.574653 pkt-line.c:80           packet:          git< 0000
10:42:50.574673 pkt-line.c:80           packet:          git< version 2
10:42:50.574679 pkt-line.c:80           packet:          git< agent=git/2.18.1
10:42:50.574684 pkt-line.c:80           packet:          git< ls-refs
10:42:50.574688 pkt-line.c:80           packet:          git< fetch=shallow
10:42:50.574693 pkt-line.c:80           packet:          git< server-option
10:42:50.574697 pkt-line.c:80           packet:          git< 0000
10:42:50.574817 pkt-line.c:80           packet:          git< version 2
10:42:50.575308 pkt-line.c:80           packet:          git< agent=git/2.18.1

SSH 连接

验证客户端使用 Git v2:

GIT_SSH_COMMAND="ssh -v" git -c protocol.version=2 ls-remote ssh://git@your-gitlab-instance.com/group/repo.git 2>&1 | grep GIT_PROTOCOL

您应该看到发送了 GIT_PROTOCOL 环境变量:

debug1: Sending env GIT_PROTOCOL = version=2

对于服务器端,您可以使用 HTTP 的相同示例,将 URL 更改为使用 SSH。

观察连接的 Git 协议版本

有关观察生产环境中使用的 Git 协议版本的信息,请参阅相关文档