Help us learn about your current experience with the documentation. Take the survey.

gitlab-sshd

  • 级别:免费,高级,旗舰
  • 产品:GitLab 自管版

gitlab-sshd 是一个用 Go 编写的独立 SSH 服务器。它是 OpenSSH 的一个轻量级替代方案。它是 gitlab-shell 软件包的一部分,用于处理 SSH 操作

虽然 OpenSSH 使用受限 shell 的方式,但 gitlab-sshd

  • 作为一个现代的多线程服务器应用程序运行。
  • 使用远程过程调用 (RPCs) 而不是 SSH 传输协议。
  • 比 OpenSSH 占用更少的内存。
  • 支持为运行在代理服务器后面的应用程序按 IP 地址限制组访问权限

有关实现的更多详细信息,请参阅这篇博客文章

如果您正在考虑从 OpenSSH 切换到 gitlab-sshd,请注意以下几点:

  • PROXY 协议:gitlab-sshd 支持 PROXY 协议,允许其在 HAProxy 等代理服务器后运行。此功能默认未启用,但可以启用
  • SSH 证书:gitlab-sshd 不支持 SSH 证书。更多信息,请参阅 issue 655
  • 2FA 恢复码:gitlab-sshd 不支持 2FA 恢复码的重新生成。尝试运行 2fa_recovery_codes 会导致错误:remote: ERROR: Unknown command: 2fa_recovery_codes。详情请参阅相关讨论

GitLab Shell 的功能不止于 Git 操作,还可用于各种基于 SSH 的 GitLab 交互。

启用 gitlab-sshd

要使用 gitlab-sshd

以下说明将在与 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 生成密钥。如果您希望禁用此自动生成功能,请添加以下行:

    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 目录中。

以下说明将用 gitlab-sshd 替换 OpenSSH:

  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 地址。为了获取真实的 IP 地址,gitlab-sshd 支持 PROXY 协议

要启用 PROXY 协议:

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

    gitlab_sshd['proxy_protocol'] = true
    # PROXY 协议策略 ("use", "require", "reject", "ignore"),"use" 为默认值
    gitlab_sshd['proxy_policy'] = "use"

    有关 gitlab_sshd['proxy_policy'] 选项的更多信息,请参阅 go-proxyproto

  2. 保存文件并重新配置 GitLab:

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

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