gitlab-sshd

  • 在云原生环境下的生产可用引入于极狐GitLab 15.1,在 Linux 软件包环境下的生产可用引入于极狐GitLab 15.9。

gitlab-sshd 是用 Go 编写的一个独立的 SSH 服务器。它作为 gitlab-shell 包的一部分提供。作为 OpenSSH 的替代方案,它占用的内存较少,并且支持在代理后面运行的应用程序的 IP 地址组访问限制

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

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

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

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

启用 gitlab-sshd

要使用 gitlab-sshd

Linux Package(Omnibus)

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

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

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

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

    sudo gitlab-ctl reconfigure
    

默认情况下,gitlab-sshd 作为 git 用户运行。因此,gitlab-sshd 无法在低于 1024 的特权端口号上运行。这意味着用户必须使用 gitlab-sshd 端口访问 Git,或者使用负载均衡器将 SSH 流量定向到 gitlab-sshd 端口。

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

Helm Chart(Kubernetes)

以下说明将 OpenSSH 切换为支持 gitlab-sshd

  1. gitlab-shell chart 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 中配置不同的端口

PROXY 协议支持

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

Linux Package(Omnibus)

要启用代理协议:

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

     gitlab_sshd['proxy_protocol'] = true
     # # Proxy protocol policy ("use", "require", "reject", "ignore"), "use" is the default value
     gitlab_sshd['proxy_policy'] = "use"
    
  2. 保存文件并重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

Helm Chart(Kubernetes)

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

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