![Active Directory 인증을 사용하여 GitLab에 푸시하려고 할 때 500 오류 발생](https://rvso.com/image/1604277/Active%20Directory%20%EC%9D%B8%EC%A6%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20GitLab%EC%97%90%20%ED%91%B8%EC%8B%9C%ED%95%98%EB%A0%A4%EA%B3%A0%20%ED%95%A0%20%EB%95%8C%20500%20%EC%98%A4%EB%A5%98%20%EB%B0%9C%EC%83%9D.png)
우리는 현재 SubVersion을 사용하고 있지만 사전 커밋 코드 검토를 수행할 수 있도록 Git 기반 솔루션으로 마이그레이션하려고 합니다. 요구 사항은 중앙 Git 저장소가 온프레미스에서 호스팅되고, 프로젝트 관리를 허용하는 시각적 프런트 엔드가 있으며, Active Directory 인증을 사용한다는 것입니다.
시험삼아 Ubuntu 서버 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 탭이 나타나고 소프트웨어 그룹의 구성원은 AD 로그온 및 비밀번호를 사용하여 로그인할 수 있지만 비구성원은 그렇지 않습니다. "내부 소프트웨어 부서" 그룹의 구성원에게는 관리자 권한이 자동으로 할당되지 않지만 수동으로 추가할 수 있으므로 괜찮습니다.
SVN 저장소의 기록을 GitLab에 푸시하거나 저장소를 복제하려고 할 때 문제가 발생합니다. GitLab에 내부 소프트웨어 그룹을 만들고 readme.txt 파일을 사용하여 TestProject 프로젝트를 추가했습니다. 내 Windows 10 PC에 Windows용 Git 자격 증명 관리자를 설치했습니다. 다음을 사용하여 이것을 내 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에서 다음을 발견했습니다.
{"방법":"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","path":"/internal-software/testproject /git/info/refs","형식":"/","controller":"프로젝트::GitHttpController","action":"info_refs","status":500,"error":"ArgumentError: 암호화 또는 메서드를 제공해야 합니다.","duration":215.3,"view ":0.0,"db":14.11,"시간":"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
이를 통해 복제하고 푸시할 수 있었습니다. 내가 알아차린 것은 내가 관리자 계정을 사용하여 차단을 해제할 때까지 연결된 다른 사람은 자신의 계정이 차단되었다는 말을 들었다는 것입니다.