Які "права доступу" можуть блокувати доступ до сховища 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
    
  • Перезапустіть {unicorn, sidekiq, redis}

    Звіти, що перезапуск однієї або декількох служб очищає це, схоже, не застосовуються тут. Це не переривчаста проблема, яка виводить виправлення демона.

  • Фізично не створюється репо

    Але це. Перший раз, коли щойно ~gitlab/repositories/username/reponame.gitстворюється голий gpo repo in, здається, має правильні дозволи.

  • Gitlab-shell не може спілкуватися з сервером API, оскільки A) проблеми з DNS, B) неправильне ip / порт / прив'язка інтерфейсу 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 та приймає натиск. Це лише проблема при спробі використання 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, потім "отримано відключення від <віддаленого 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

Потім підніміться на рівень Uper: Gitlab-оболонка Перевірте /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-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

До. <head-desk> Ви весь час були на правильному шляху Користувач gitlab був призначений /bin/false. Або пакет Arch не встановлює оболонку правильно, додаючи цього користувача, або я порушив його десь у процесі впровадження ldap аутентифікації в цій системі. Дякую за всі зусилля.
Калеб

Ти для відповіді, допоміг мені налагодження. Інша проблема - коли увімкнено переадресацію ключа ssh, ви відправляєте неправильний ключ до gitlab, який не може вас ідентифікувати. Коли ви вступите в gitlab, ви також отримаєте привітальний анонім. Просто відключіть переадресацію клавіш на своєму перемикачі за допомогою 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

У мене була ця сама проблема, і після днів Googling та пошуку переповнення стека я нарешті знайшов свою проблему. Я хотів зв'язати це з письмовим підключенням до Gitlab лише на випадок, якщо хтось інший мав ту ж проблему.

Я знайшов своє рішення тут: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

Я в Windows, і проблема в тому, що Git Bash намагався отримати своє ключове місце SSH від plink.exe, встановленого за допомогою Putty.

Рішенням було видалення змінної середовища GIT_SSH. Тоді все спрацювало.

Сподіваюся, це допомагає комусь там.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.