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:
-
编辑
/etc/gitlab/gitlab.rb:gitlab_sshd['enable'] = true gitlab_sshd['listen_address'] = '[::]:2222' # 相应地调整端口 -
(可选)默认情况下,如果
/var/opt/gitlab/gitlab-sshd目录中不存在 SSH 主机密钥,Linux 包安装会为gitlab-sshd生成密钥。如果您希望禁用此自动生成功能,请添加以下行: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 目录中。
以下说明将用 gitlab-sshd 替换 OpenSSH:
-
将
gitlab-shellchart 的sshDaemon选项设置为gitlab-sshd。例如:gitlab: gitlab-shell: sshDaemon: gitlab-sshd -
执行 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 协议:
-
编辑
/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库。 -
保存文件并重新配置 GitLab:
sudo gitlab-ctl reconfigure
-
设置
gitlab.gitlab-shell.config选项。例如:gitlab: gitlab-shell: config: proxyProtocol: true proxyPolicy: "use" -
执行 Helm 升级。