{{< details >}}

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

{{< /details >}}

{{< history >}}

  • 在极狐GitLab 15.1 中引入了云原生极狐GitLab 的使用。
  • 在极狐GitLab 15.9 中引入了 Linux 软件包的使用。

{{< /history >}}

gitlab-sshd一个独立的 SSH 服务器,用 Go 语言编写。它作为 gitlab-shell 软件包的一部分提供。它作为 OpenSSH 的替代方案,具有较低的内存使用,并支持在代理后运行的应用程序进行 按 IP 地址限制群组访问

gitlab-sshd 是 OpenSSH 的轻量级替代方案,用于提供 SSH 操作。虽然 OpenSSH 使用受限的 shell 方法,但 gitlab-sshd 更像是现代多线程服务器应用程序,响应传入请求。主要区别在于 OpenSSH 使用 SSH 作为传输协议,而 gitlab-sshd 使用远程过程调用(RPCs)。

极狐GitLab Shell 的功能不仅限于 Git 操作。

如果您正在考虑从 OpenSSH 切换到 gitlab-sshd,请考虑以下问题:

  1. gitlab-sshd 支持 PROXY 协议。它可以在依赖它的代理服务器(如 HAProxy)后面运行。PROXY 协议默认未启用,但可以启用
  2. gitlab-sshd 不支持 SSH 证书。
  3. gitlab-sshd 不支持 2FA 恢复代码再生。尝试运行 2fa_recovery_codes 会导致以下错误:remote: ERROR: Unknown command: 2fa_recovery_codes

启用 gitlab-sshd

要使用 gitlab-sshd

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

以下说明在与 OpenSSH 不同的端口上启用 gitlab-sshd

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_sshd['enable'] = true
    gitlab_sshd['listen_address'] = '[::]:2222' # 根据需要调整端口
    
  2. 可选。默认情况下,如果 /var/opt/gitlab/gitlab-sshd 中不存在 SSH 主机密钥,Linux 软件包安装会生成 gitlab-sshd 的 SSH 主机密钥。如果您希望禁用此自动生成,请添加此行:

    gitlab_sshd['generate_host_keys'] = false
    
  3. 保存文件并重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

默认情况下,gitlab-sshdgit 用户身份运行。因此,gitlab-sshd 不能在低于 1024 的特权端口上运行。这意味着用户必须通过 gitlab-sshd 端口访问 Git,或使用负载均衡器将 SSH 流量引导到 gitlab-sshd 端口以隐藏这一点。

用户可能会看到主机密钥警告,因为新生成的主机密钥与 OpenSSH 主机密钥不同。如果这是一个问题,请考虑禁用主机密钥生成并将现有的 OpenSSH 主机密钥复制到 /var/opt/gitlab/gitlab-sshd 中。

{{< /tab >}}

{{< tab title=”Helm chart (Kubernetes)” >}}

以下说明用 gitlab-sshd 替代 OpenSSH:

  1. gitlab-shell 图表的 sshDaemon 选项设置为 gitlab-sshd。例如:

    gitlab:
      gitlab-shell:
        sshDaemon: gitlab-sshd
    
  2. 执行 Helm 升级。

默认情况下,gitlab-sshd 监听:

  • 端口 22 (global.shell.port) 的外部请求。
  • 端口 2222 (gitlab.gitlab-shell.service.internalPort) 的内部请求。

您可以在 Helm chart 中配置不同的端口

{{< /tab >}}

{{< /tabs >}}

PROXY 协议支持

当在 gitlab-sshd 前使用负载均衡器时,极狐GitLab 会报告代理的 IP 地址,而不是客户端的实际 IP 地址。gitlab-sshd 支持 PROXY 协议以获取真实的 IP 地址。

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

要启用 PROXY 协议:

  1. 编辑 /etc/gitlab/gitlab.rb

    gitlab_sshd['proxy_protocol'] = true
    # Proxy 协议策略 ("use", "require", "reject", "ignore"),"use" 是默认值
    gitlab_sshd['proxy_policy'] = "use"
    
  2. 保存文件并重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

{{< /tab >}}

{{< tab title=”Helm chart (Kubernetes)” >}}

  1. 设置 gitlab.gitlab-shell.config 选项。例如:

    gitlab:
      gitlab-shell:
        config:
          proxyProtocol: true
          proxyPolicy: "use"
    
  2. 执行 Helm 升级。

{{< /tab >}}

{{< /tabs >}}