gitlab 저장소에 대한 액세스를 차단할 수있는 "액세스 권한"은 무엇입니까?


14

깨끗한 서버에서 gitlab (6.5.1)을 설정하려고합니다. 모든 것이 작동하는 것처럼 보이지만 git은 어떤 프로젝트로도 밀어 넣을 수 없습니다. 새로 작성된 프로젝트 페이지의 명령을 따르고 ssh를 통해 원격으로 푸시하면 다음이 제공됩니다.

$ git push -u origin master
fatal: Could not read from remote repository.

Please make sure you have the correct access
rights and the repository exists.

이것은 상당히 일반적인 문제인 것 같습니다. 불행히도 많은 잠재적 인 원인이있는 것으로 보이며 그중 어느 것도 일치하지 않습니다. 에서 문제 3424 온라인 오래된 자료와 다양한 다른 소스에서 내가 본 다음과 같은 제안을 확인했습니다 :

  • 남은 ssh 키

    남은 부분이없는 깔끔한 설정입니다. 내 키가 인증 된 키 파일에 올바르게 추가되었으며 나열된 유일한 키입니다.

  • 디버그 로깅으로 ssh를 실행하면 Ruby 환경 변수와 관련된 오류가 표시됩니다.

    광산이 깨끗하게 나옵니다. SSH 디버그 성공적인 연결을 보여줍니다 . 인증 핸드 쉐이킹에 관한 모든 것이 정상적이며, 이것이 출력의 끝입니다.

    debug1: Sending command: git-receive-pack 'username/reponame.git'
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • gitlab-shell 환경에 문제가 있습니다.

    위의 동일한 오류 메시지를 가진 다른 많은 것들과 달리, gitlab-shell check 스크립트는 깨끗한 건강 청구서를 반환합니다.

    % sudo -u gitlab -H ~gitlab/gitlab-shell/bin/check   
    Check GitLab API access: OK
    Check directories and files: 
            /var/lib/gitlab/repositories: OK
            /var/lib/gitlab/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.5
    Send ping to redis server: PONG
    
  • {unicorn, sidekiq, redis}를 다시 시작하십시오.

    하나 이상의 서비스를 다시 시작하면이 문제가 해결된다는 보고서는 여기에 적용되지 않는 것 같습니다. 이것은 데몬을 수정하는 간헐적 인 문제가 아닙니다.

  • 레포는 물리적으로 생성되지 않습니다

    하지만 그것은. 맨 처음으로 맨손으로 git repo in ~gitlab/repositories/username/reponame.git이 매번 만들어지고 올바른 권한이있는 것 같습니다.

  • A) DNS 문제, B) 잘못된 ip / port / 인터페이스 바인딩 C) 후행 슬래시가 없거나 없기 때문에 Gitlab-shell은 API 서버와 통신 할 수 없습니다.

    확인 스크립트는 API 액세스가 정상이라고 말합니다.

    나는 nginx를 실행하고 있지 않으므로 관련된 기본 IP 바인딩 문제는 해당 없음입니다.

    에서의 청취 가치 *:8080와 시도를 모두 시도 127.0.0.1:8080했습니다 unicorn.yml.

    그 외에도, 로컬 호스트 127.0.0.1과 DNS를 잘 사용하는 정규화 된 도메인 이름의 다양한 반복을 shell.yml시도했습니다. 또한 포트 80의 Apache SSL / 프록시 호스트 대신 포트 8080의 유니콘 서버에 직접 연결하려고 시도했지만 아무런 차이가 없습니다. 내 인증서는 자체 서명 되지 않았 으며 브라우저에서 제대로 작동하지만 self_signed_cert: true어쨌든 설정을 시도 했습니다. 아무것도.

  • 보고 된 git 경로가 잘못되었습니다. gitlab 사용자 홈에서 정규화 된 경로를 추가하십시오.

    이것은 gitlab-shell이 ​​이미 이것을 수정하기 위해 원숭이 사업을하지 않는 경우 합법적 인 제안처럼 보이지만 git remote add origin gitlab@server:username/reponame.git``git remote add origin gitlab @ server : repositories / username / reponame.git``로 변경하여 아무 소용이 없습니다. 같은 오류입니다.

이것은 제안 된 해결책 중 하나 인 것처럼 보이지만 그중 어느 것도 옳지 않은 것 같습니다. 참고 http를 푸시 할 수 있습니다. 로그인 프롬프트는 내 LDAP 사용자 이름과 비밀번호를 승인하고 푸시를 승인합니다. 이것은 SSH를 사용하려고 할 때만 발생하는 문제입니다. ssh 로그인 부분 만 테스트하면 ssh -T gitlab@server정상적으로 작동합니다.

이 오류의 원인은 무엇입니까?

gitlab에서 그러한 문제를 디버깅하는 방법은 무엇입니까? 에 전혀 관련이없는 것 같습니다 ~gitlab/gitlab-shell/gitlab-shell.log. 더 유익한 오류 메시지는 어디에 있습니까?


"ssh -vv gitlab @ server"의 출력은 무엇입니까 ??
DrGkill

(눈에) 흥미 @DrGkill 아무것도, 직접 참조하십시오 .
Caleb

gitlab이 외부 로그인을 허용하는 경우 sshd_config를 참조하십시오. SSH 또는 gitlab-shell : 가능한 두 가지 범인을 말합니다. gitlab이 연결될 때 auth.log는 무엇을 말합니까?
DrGkill

@ DrGkill 나는 그것을 확인했다 (그리고 그것이 sshd 또는 pam에 의한 외부 로그인을 허용하지 않았다면 위에서 보여준 로그는 성공적인 인증 통지를 보여주지 않았을 것이다). SSH가 제대로 연결되어 있습니다. 서버 측 로그는 성공적인 인증, 세션이 열렸 음을 보여 주며, 사용자 환경 설정에 관한 시스템적인 것들과 "<remote ip>와의 연결 끊김"과 세션 정리에 관한 더 많은 것들을 보여줍니다.
Caleb

답변:


7

이 SSH 디버그 메시지로 인해 SSH와 시스템 사이에 구성 문제가 있다고 확신합니다.

client_input_channel_req: channel 0 rtype eow@openssh.com reply 0

인증에 성공하면 바로이 메시지가 표시되고 bash에서 메시지가 표시되지 않습니다. 이는 로그인 후 프로그램이 시작되지 않았 음을 의미합니다.

gitlab 사용자에 대한 올바른 설정이 있으면 passwd 파일을 살펴보십시오.

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

다음과 같은 구성 파일에서 bash에 이상한 것이 없는지 확인하십시오.

  • bash.bashrc
  • .프로필
  • .bashrc

그런 다음 상위 레벨로 올라갑니다. Gitlab-shell /path/to/gitlab/.ssh/authorized_keys에 아래 구성이 있는지 확인하십시오 .

command="/path/to/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A...

/ /에 / gitlab / gitlab 쉘 / 빈 / gitlab - 쉘 경로 gitlab 사용자와 실행 소유.

다음 명령을 실행하여 gitlab-shell이 ​​완전히 작동하는지 확인할 수 있습니다.

# /path/to/gitlab-shell/bin/gitlab-shell
Welcome to GitLab, Anonymous!

원격 로그인이 실제로 작동하고 gitlab-shell에 올바르게 연결된 경우 원격으로 로그인하려고하면 덤프하기 전에 동일한 환영 메시지가 표시되지만 ssh 키를 사용하여 로그인 한 사용자와 일치해야합니다.

$ ssh gitlab@server
Welcome to GitLab, <your user's full name>!
Connection to <server> closed.

여기에 ssh가 gitlab에 전혀 연결되어 있지 않다는 메시지가 없을 것입니다.

마지막으로 gitlab-shell 구성 (config.yml)을 확인하고 다음을 확인하십시오.

http_settings:
    # trailing slash is important
    gitlab_url: "https://remote_server/"
    ca_file: /path/to/webserver/certificate.crt

그리고 결국 :

    self_signed_cert: false

<head-desk> 당신은 올바른 길을 가고있었습니다. gitlab 사용자가 할당되었습니다 /bin/false. Arch 패키지는 해당 사용자를 추가 할 때 셸을 올바르게 설정하지 않았 거나이 시스템에서 ldap 인증을 구현하는 도중 어딘가에 깨뜨 렸습니다. 모든 노력에 감사드립니다.
Caleb

답을 얻으려면 디버깅에 도움이되었습니다. 또 다른 문제는 ssh 키 전달이 활성화되어 있으면 잘못된 키를 gitlab에 전송하여 사용자를 식별 할 수 없다는 것입니다. gitlab에 들어가면 Welcome Anonymous가 표시됩니다. ssh를 -a와 jumpserver에 그냥 비활성화 키 전달
tommics

나는 Caleb과 같은 문제를 겪었고, 또한 스스로 작동시키기 위해서는 / bin / {false, true, nologin} 대신 쉘을 설정해야한다는 것을 스스로 발견했다. 그러나 실제로 사용자는 설치 중에 의도적으로 쉘없이 작성됩니다 ( gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/… 참조 ) sudo adduser --disabled-login --gecos 'GitLab' git. 따라서 쉘없이 작동해야합니다. 나는 여전히 다른 해결책을 찾고 있습니다.
Huygens

0

나는이 같은 문제가 있었고 며칠 동안 인터넷 검색 및 스택 오버플로 검색 후 마침내 내 문제를 발견했습니다. 다른 사람이 같은 문제를 겪을 경우를 대비하여 이것을 Gitlab에 연결하여 작성하고 싶었습니다.

내 솔루션을 여기에서 찾았습니다 : /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

나는 Windows에 있고 문제는 Git Bash가 Putty와 함께 설치된 plink.exe에서 SSH 키 위치를 가져 오는 중이라는 것입니다.

해결책은 환경 변수 GIT_SSH를 삭제하는 것이 었습니다. 그런 다음 모든 것이 효과가있었습니다.

이것이 누군가를 도울 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.