Подтвердить что ты не робот

Gitosis требует пароль, даже если предоставляется открытый ключ

Я столкнулся с некоторыми проблемами при попытке настроить gitosis на моем Archlinux

http://wiki.archlinux.org/index.php/Setting_Up_Git_ACL_Using_gitosis

Я сослался на эту статью в вики и успешно установил гитоз.

$sudo pacman -U gitosis- git -20090525-1-i686.pkg.tar.gz
$ sudo -H -u gitosis gitosis-init </tmp/id_rsa.pub

И изменил /srv/gitosis/.ssh/authorized_keys, чтобы включить мой локальный пользователь id_rsa.pub.

Но когда я запускаю git clone в качестве локального пользователя,

$git clone gitosis @host: gitosis-admin.git

В нем говорится

Инициализированный пустой репозиторий git в /home/wyx/gitosis -admin/.git/
[email protected] пароль: *****
fatal: "gitosis-admin.git" не выглядит как репозиторий git
фатальный: удаленный конец неожиданно повесил трубку

Итак, операция клонирования git завершилась неудачно. Мне интересно, почему он пытается инициализировать пустой репозиторий git в локальном каталоге пользователя (/home/wyx)? И поскольку я уже добавил локальный идентификатор пользователя id_rsa.pub в .ssh/authorized_keys, почему он все еще запрашивает пароль?

4b9b3361

Ответ 1

Был создан пустой репозиторий, потому что именно так работает git: он должен инициализировать репо, прежде чем он сможет начать удалять в него удаленные объекты. К сожалению, это означает, что вам придется вручную удалить пустое репо, прежде чем повторять попытку клонирования.

Что касается причины отказа клона, похоже, что вы используете неправильный синтаксис для пути удаленного репозитория; git clone не использует синтаксис scp. На самом деле, если вы не укажете протокол клона, я полагаю, что он предполагает протокол git, а не ssh, что, вероятно, было бы причиной того, что он попросил вас ввести пароль. Вместо этого попробуйте:

$ git clone ssh://[email protected]/~/gitosis-admin.git

Ответ 2

Я также столкнулся с той же проблемой "фатальный:" /gitosis -admin.git ", похоже, не является допустимым репозиторием". Я много искал проблему и, наконец, нашел решение.

На самом деле, адрес пользователя gitosis по умолчанию - "/srv/gitosis": как в случае моей установки с сервером ubuntu 10.04.

И когда мы пишем "git clone [email protected]: gitosis-admin.git", он ищет репозиторий gitosis-admin.git в /srv/gitosis. Поэтому, когда я вошел в /srv/gitosis, я узнал, что внутри него есть другой репозиторий, называемый репозиториями, который состоит из репозитория gitosis-admin.git.

Так что фактически по умолчанию gitosis-admin.git не был в местоположении по умолчанию. Поэтому мне нужно изменить путь к команде, а затем он работал нормально.

Я получил репозиторий, клонированный на мою локальную машину. Я использовал команду как:

"git clone [email protected]: репозитории /gitosis -admin.git", и он отлично работал у меня.

Обратитесь к каталогу gitosis-admin в вашем случае, и я надеюсь, что вы сможете решить свою проблему.

Ответ 3

Это то, что решило проблему для меня (на Ubuntu):

git clone [email protected]:/srv/gitosis/repositories/gitosis-admin.git

Ответ 4

Gitosis создает собственный файл authorized_keys. Если у вас уже есть этот файл, удалите его и разрешите gitosis-init воссоздать его. Как только это будет сделано, не связывайтесь с файлом.

Ответ 5

У меня была такая же проблема на ubuntu,

Он работал с git clone ssh://[email protected]/absolutePath/gitosis-admin.git

Ответ 6

Редактирование authorized_keys не обязательно должно быть необходимым.

У меня когда-то была проблема авторизации, сервер gitosis продолжал спрашивать пароль, даже если бы я поместил свой открытый ключ раньше. Я понял, что gitosis дал мне предупреждение "ПРЕДУПРЕЖДЕНИЕ: gitosis.ssh: Небезопасное имя пользователя SSH в ключевом файле:" [email protected] ", когда я попытался зафиксировать и нажать мои изменения на гитоз.

Изменение пользовательской части хоста в ключевом файле и имени ключевого файла решило мою проблему. так или иначе гитоз не понравился предыдущий.

Ответ 7

Я решил аналогичную проблему. Возможно, это не совсем то, что происходит в вашем случае, но вы можете попытаться повторно применить те же проблемы, что и я.

Я понял, что когда я нажимал клавиши для нового пользователя, я получал эту стеклу, что является признаком того, что крючок на gitosis не смог обработать новый ключ.

remote: Traceback (most recent call last):
remote:   File "/usr/local/bin/gitosis-run-hook", line 9, in <module>
remote:     load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-run-hook')()
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run
remote:     return app.main()
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main
remote:     self.handle_args(parser, cfg, options, args)
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 81, in handle_args
remote:     post_update(cfg, git_dir)
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/run_hook.py", line 45, in post_update
remote:     config=cfg,
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 95, in set_export_ok
remote:     for (dirpath, repo, name) in walk_repos(config):
remote:   File "/usr/local/lib/python2.7/dist-packages/gitosis-0.2-py2.7.egg/gitosis/gitdaemon.py", line 72, in walk_repos
remote:     assert ext == '.git'
remote: AssertionError

Ошибка показывала только ONCE, поэтому я наивно отклонил ее как кратковременный сбой.

На практике Gitosis работал только для моего ключа, но он не работал ни для одного из пользователей, которого я пытался поддерживать. В ~/.ssh/authorized_keys я не смог найти открытый ключ пользователя, который, как я думал, только что добавил. Вот почему мой друг постоянно спрашивал пароль каждый раз, когда он пытался клонировать.

Я добавил отладку в конфигурацию Gitosis, добавив эти две строки в gitosis.conf

[gitosis]
loglevel=DEBUG 

Мне пришлось продолжать добавлять и удалять пользователей в файл gitosis.conf, чтобы крючок снова запускался. В моем журнале отладки обнаружено

remote: DEBUG:gitosis.gitdaemon:Deny 'syncShare'
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d', seeing ['buildtools', 'QA_Dashboard']
remote: DEBUG:gitosis.gitdaemon:Walking 'legacy.d/buildtools', seeing ['.git', 'conf', 'scripts'] 
remote: Traceback (most recent call last): 
etc ...

А-ха! Поскольку крюк выполнил "прогулку" через репозиторий, он нашел каталог .git под legacy.d/buildtools, и именно там произошел assert ext == '.git'.

Я использовал сервер для хранения простого клона из другого репозитория. Обратите внимание, простой клон, а не зеркало или голый репозиторий. Как и каждый клон, он содержит каталог .git.

Крючок в Gitosis не знает, что делать с каталогом .git. Он думает, что это репозиторий в пустом имени и прерван. Как только я уничтожил этот клоун, все возобновилось, работая красиво.

Ответ 8

Наконец-то я начал работать так:

git clone ssh://[email protected]:1337/home/git/repositories/gitosis-admin.git

где используется 1337 порт ssh.

Ответ 9

Такая же проблема, и в моем случае было то, что у меня были неправильные authorized_keys в .ssh/. Я, должно быть, испортил это в какой-то момент...

Ответ 10

Переместившись на новую машину Ubuntu и сам столкнувшись с этим вопросом, я увидел пару ответов, которые заставили меня двигаться в правильном направлении, а именно, используя абсолютный путь к файлам .git для каждого репозитория.

Экспериментируя немного, я заметил, что пути к домашнему каталогу пользователя git также работали, что сократило что-то вроде:

[email protected]:/var/git/repositories/project.git

до

[email protected]:repositories/project.git

Играя немного больше, я попытался переместить файлы проекта из репозиториев прямо в домашний каталог git; теперь требуется только проект:

[email protected]:project.git

Это немного взломано, но я сомневаюсь, что это навредит. Было бы хорошо знать, что изменилось, поскольку я принимал gitosis на другом Ubuntu (старше) и смог иметь проекты внутри каталога репозиториев с последними нотами сверху.

Ответ 11

Чтобы получить больше информации о проблемах с auth, собирайте подробные данные журнала отладки: используя

ssh -vvv [email protected]_host

прямой ручной трюк (который, в первую очередь, в основном, использует наиболее точную/прямую ссылку на контекст, в данном случае: фактические механизмы ssh, а не инструмент - отдаленный - и, следовательно, по необходимости менее точный - git обработка!).