尝试使用 Active Directory 身份验证推送到 GitLab 时出现 500 错误

尝试使用 Active Directory 身份验证推送到 GitLab 时出现 500 错误

我们目前使用 SubVersion,但希望迁移到基于 Git 的解决方案,以便能够执行提交前代码审查。要求是中央 Git 存储库托管在本地,具有可视化前端以允许管理项目,并使用 Active Directory 身份验证。

作为试用,我在运行 Ubuntu Server 18.04 的虚拟机上安装了 GitLab EE。我使用以下配置设置了 AD 身份验证:

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
 main:
  label: 'MyOrganisation'
  host: '172.16.0.6'
  port: 389
  uid: 'sAMAccountName'
  bind_dn: 'CN=ldapbinduser,CN=Users,DC=myorganisation,DC=com'
  password: 'password' 
  timeout: 30
  active_directory: true
  allow_username_or_mail_login: false
  lowercase_usernames: true
  block_auto_created_users: true
  base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  group_base: 'OU=Software,OU=Engineering,DC=myorganisation,DC=com'
  admin_group: 'internal software dept'
EOS

这已部分成功。GitLab 登录页面中出现 MyOrganisation 选项卡,Software 组的成员可以使用其 AD 登录名和密码登录,而非成员则不能。“Internal Software Dept”组的成员不会自动分配管理员权限,但这没关系,因为我们可以手动添加它们。

尝试将 SVN 存储库的历史记录推送到 GitLab 或克隆存储库时,会出现问题。我在 GitLab 中创建了一个内部软件组,并使用 readme.txt 文件向其添加了一个 TestProject 项目。在我的 Windows 10 PC 上,我安装了适用于 Windows 的 Git Credential Manager。当我尝试使用以下命令将其克隆到我的 PC 时:git clonehttp://gitlab/internal-software/testproject.git 我收到一条消息:

致命:无法访问'http://gitlab/internal-software/testproject.git/':请求的 URL 返回错误:500 WireShark 显示两次连接尝试,第一次尝试响应为 401 – 未经授权,第二次尝试响应为 500 – 内部服务器错误:

1   local IP    gitlab IP   TCP 66  59710 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
2   gitlab IP   local IP    TCP 66  80 → 59710 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
3   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=1 Ack=1 Win=525568 Len=0
4   local IP    gitlab IP   HTTP    241 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1
5   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=1 Ack=188 Win=30336 Len=0
6   gitlab IP   local IP    HTTP    618 HTTP/1.1 401 Unauthorized  (text/plain)
7   local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=188 Ack=565 Win=524800 Len=0
8   local IP    gitlab IP   HTTP    292 GET /internal-software/testproject.git/info/refs?service=git-upload-pack HTTP/1.1 
9   gitlab IP   local IP    TCP 60  80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=0
10  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=565 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
11  gitlab IP   local IP    TCP 1514    80 → 59710 [ACK] Seq=2025 Ack=426 Win=31360 Len=1460 [TCP segment of a reassembled PDU]
12  gitlab IP   local IP    HTTP    309 HTTP/1.1 500 Internal Server Error  (text/html)
13  local IP    gitlab IP   TCP 54  59710 → 80 [ACK] Seq=426 Ack=3740 Win=525568 Len=0
14  local IP    gitlab IP   TCP 54  59710 → 80 [RST, ACK] Seq=426 Ack=3740 Win=0 Len=0

500 – 内部服务器错误响应的内容是标准的 GitLab 500 – “哎呀,我们这边出了点问题” 页面。

在服务器上,我查看了 var/logs/gitlab/gitlab-rails 中的 .log 文件,并在 production_json.log 中发现了以下内容:

{“method”:“GET”,“路径”:“/internal-software/testproject/git/info/refs”,“格式”:“/","controller":"项目::GitHttpController","action":"info_refs","status":401,"duration":35.81,"view":1.05,"db":9.7,"time":"2019-09-19T08:37:55.371Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"} {“method”:“GET”,“路径”:“/internal-software/testproject/git/info/refs”,“格式”:“/","controller":"Projects::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError:必须提供加密或方法","duration":215.3,"view":0.0,"db":14.11,"time":"2019-09-19T08:37:55.803Z","params":[{"key":"service","value":git-upload-pack"},{"key":"namespage_id","value":"internal-software"},{"key":"project_id","value":"testproject.git"}],"remote_ip":"172.16.1.46","user_id":null,"username":null,"ua":git/2.17.0.windows.1","queue_duration":null,"correlation_id":"long_uid"}

这些似乎与上面的 HTTP 请求和响应相匹配。第一个是 401,第二个是 500。

错误信息是 ArgumentError: 必须提供加密或方法 我曾尝试在 GitLab 网站、Stack Overflow、Stack Exchange 和一些知名搜索引擎上搜索这个问题,但只得到与我的问题不符的近似结果。

答案1

GitLab 支持人员给出的答案是我在配置中缺少以下设置:

  encryption: 'plain'
  verify_certificates: true

有了这些,我就可以克隆和推送了。我注意到,其他任何连接的人都被告知他们的帐户已被阻止,直到我使用管理员帐户解除阻止。

相关内容