gitlab-sshd
- 引入于 14.5,作为 Alpha 功能,适用于私有化部署版。
- 可用于生产环境于 15.1 版本(云原生安装)/ 15.9 版本(Omnibus 安装)。
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
要使用 gitlab-sshd
:
Omnibus
以下说明在与 OpenSSH 不同的端口上启用 gitlab-sshd
:
-
编辑
/etc/gitlab/gitlab.rb
:gitlab_sshd['enable'] = true gitlab_sshd['listen_address'] = '[::]:2222' # Adjust the port accordingly
-
可选。默认情况下,如果
/var/opt/gitlab/gitlab-sshd
中不存在,Omnibus GitLab 会为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
中。
Kubernetes
以下说明将 OpenSSH 切换为支持 gitlab-sshd
:
-
将
gitlab-shell
chartsshDaemon
选项设置为gitlab-sshd
。例如:gitlab: gitlab-shell: sshDaemon: gitlab-sshd
-
执行 Helm 升级。
默认情况下,gitlab-sshd
监听:
- 端口 22 (
global.shell.port
) 上的外部请求。 - 端口 2222 上的内部请求(
gitlab.gitlab-shell.service.internalPort
)。
PROXY 协议支持
当在 gitlab-sshd
前面使用负载均衡器时,极狐GitLab 报告代理的 IP 地址而不是客户端的实际 IP 地址。gitlab-sshd
支持 PROXY 协议获取真实 IP 地址。
Omnibus
要启用代理协议:
-
编辑
/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"
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
Kubernetes
-
设置
gitlab.gitlab-shell.config
选项。例如:gitlab: gitlab-shell: config: proxyProtocol: true proxyPolicy: "use"
-
执行 Helm 升级。