Какие «права доступа» могут блокировать доступ к хранилищу 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 возвращает чистый счет здоровья:

    % 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
    
  • Restart {единорог, sidekiq, redis}

    Сообщения о том, что перезапуск одной или нескольких служб устраняет эту проблему, похоже, здесь не применяются. Это не временная проблема, возникающая при выпуске исправлений демона.

  • Репо не создается физически

    Но это. В первый раз каждый раз ~gitlab/repositories/username/reponame.gitсоздается пустое git-репо, и у него, кажется, есть правильные разрешения.

  • Gitlab-shell не может общаться с сервером API, потому что: A) проблемы с DNS, B) неправильная привязка ip / port / interface C) отсутствие / наличие косой черты.

    Скрипт проверки говорит, что доступ к API в порядке.

    Я не запускаю nginx, поэтому проблема связывания с ip по умолчанию связана с n / a.

    Я пробовал оба *:8080и 127.0.0.1:8080для значения прослушивания в unicorn.yml.

    Кроме того, я пробовал различные итерации localhost, 127.0.0.1 и полностью квалифицированное доменное имя (которое прекрасно разрешается DNS) с и без конечных слешей, shell.ymlно безрезультатно. Я также попытался подключить это напрямую к серверу единорога на порту 8080 вместо хоста Apache SSL / прокси на порту 80. Кажется, ничего не имеет значения. Мой сертификат не самоподписан и работает нормально для браузеров, но я 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 и принимает push. Это только проблема при попытке использовать SSH. Тестирование только части входа ssh ssh -T gitlab@serverработает нормально.

Что еще может быть причиной этой ошибки?

Как можно отладить такую ​​проблему в gitlab? Там, кажется, не имеет ничего общего в ~gitlab/gitlab-shell/gitlab-shell.log. Где найти более информативное сообщение об ошибке?

Калеб
источник
Что выводится: "ssh -vv gitlab @ server" ??
DrGkill
@DrGkill Ничего интересного (на мой взгляд), убедитесь сами .
Калеб
Посмотрите в своем sshd_config, разрешен ли gitlab для внешнего входа в систему. Я бы сказал 2 возможных виновника: SSH или gitlab-shell. Что говорит auth.log, когда gitlab подключается?
DrGkill
@DrGkill Я проверил это (и если бы не было разрешено внешнее вход в систему через sshd или pam, журналы, которые я показывал вам выше, не показали бы уведомление об успешной аутентификации). SSH подключается просто отлично. Журналы на стороне сервера показывают успешную аутентификацию, что сеанс был открыт, некоторые системные вещи о настройке env пользователя, затем «получил отключение от <remote ip>» и некоторые другие вещи об очистке сессии.
Калеб

Ответы:

7

Я почти уверен, что у вас есть проблема конфигурации между SSH и системой из-за этого сообщения отладки SSH:

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

Вы получаете это сообщение сразу после успешной аутентификации, и сообщение от bash отсутствует, что означает, что ни одна программа не была запущена после входа в систему.

Посмотрите в своем файле passwd, если у вас есть правильные настройки для пользователя gitlab:

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...

с / path / to / gitlab / gitlab-shell / bin / gitlab-shell, принадлежащим пользователю gitlab и исполняемому файлу.

Вы можете быть уверены, что gitlab-shell полностью работоспособен, запустив команду:

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

Если удаленный вход в систему действительно работает и правильно подключен к оболочке gitlab, вы должны получить такое же приветственное сообщение (но соответствующее пользователю, чей ключ 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
DrGkill
источник
Doh. <head-desk> Вы все время были на правильном пути. Пользователь gitlab был назначен /bin/false. Либо пакет Arch не устанавливает оболочку правильно при добавлении этого пользователя, либо я где-то сломал ее в процессе реализации аутентификации ldap в этой системе. Спасибо за все усилия.
Калеб
Ты за ответ, помог мне отладку. Другая проблема заключается в том, что когда у вас включена переадресация ключей ssh, вы отправляете неверный ключ в gitlab, который не может вас идентифицировать. Когда вы зайдете в gitlab, вы также получите Welcome Anonymous. Просто отключите переадресацию ключей на вашем JumpServer с помощью ssh -a
tommics
У меня была та же проблема, что и у Калеба, и я также обнаружил, что для ее работы необходимо установить оболочку вместо / bin / {false, true, nologin}. Но на самом деле пользователь специально создается без оболочки во время установки (см. Gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/… ) sudo adduser --disabled-login --gecos 'GitLab' git. Так что это должно работать без оболочки. Я все еще ищу другое решение.
Гюйгенс
0

У меня была такая же проблема, и после нескольких дней поиска в Google и поиска переполнения стека я наконец нашел свою проблему. Я хотел связать это в письменной форме с Gitlab на тот случай, если у кого-то еще возникнет такая же проблема.

Я нашел свое решение здесь: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

Я на Windows, и проблема была в том, что Git Bash пытался получить местоположение SSH-ключа от plink.exe, который устанавливается вместе с Putty.

Решением было удалить переменную среды GIT_SSH. Тогда все заработало.

Надеюсь, это поможет кому-то там.

AllanT
источник