{{< 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
,请考虑以下问题:
-
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
:
{{< tabs >}}
{{< tab title=”Linux package (Omnibus)” >}}
以下说明在与 OpenSSH 不同的端口上启用 gitlab-sshd
:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_sshd['enable'] = true gitlab_sshd['listen_address'] = '[::]:2222' # 根据需要调整端口
-
可选。默认情况下,如果
/var/opt/gitlab/gitlab-sshd
中不存在 SSH 主机密钥,Linux 软件包安装会生成gitlab-sshd
的 SSH 主机密钥。如果您希望禁用此自动生成,请添加此行:gitlab_sshd['generate_host_keys'] = false
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
默认情况下,gitlab-sshd
以 git
用户身份运行。因此,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:
-
将
gitlab-shell
图表的sshDaemon
选项设置为gitlab-sshd
。例如:gitlab: gitlab-shell: sshDaemon: gitlab-sshd
-
执行 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 协议:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_sshd['proxy_protocol'] = true # Proxy 协议策略 ("use", "require", "reject", "ignore"),"use" 是默认值 gitlab_sshd['proxy_policy'] = "use"
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title=”Helm chart (Kubernetes)” >}}
-
设置
gitlab.gitlab-shell.config
选项。例如:gitlab: gitlab-shell: config: proxyProtocol: true proxyPolicy: "use"
-
执行 Helm 升级。
{{< /tab >}}
{{< /tabs >}}