Gitosis requires password even though the public key is given

前端 未结 11 771
挽巷
挽巷 2021-02-07 03:51

I\'m confronted with some problems when trying to configure gitosis on my Archlinux

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

I referr

11条回答
  •  -上瘾入骨i
    2021-02-07 04:27

    I resolved a similar issue. It might not be exactly what is happening in your case but you could try to re-apply the same troubleshooting which I did.

    I realized that when I was pushing keys for a new user I was getting this stacktrace, which is the symptom that the hook on gitosis failed to process the new key.

    remote: Traceback (most recent call last):
    remote:   File "/usr/local/bin/gitosis-run-hook", line 9, in 
    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
    

    The error was showing only ONCE, so I naively dismissed it as a momentary failure.

    In practice, Gitosis was working only for my key, but it wasn't working for any of the users which I was trying to support. In the ~/.ssh/authorized_keys I could not find the public key of the user which I thought I had just added. This is why my friend kept being asked for password every time he attempted cloning.

    I added debugging to the Gitosis configuration, by adding these two lines to gitosis.conf

    [gitosis]
    loglevel=DEBUG 
    

    I had to keep adding and removing users to the gitosis.conf file so that the hook would be triggered again. My debug log revealed

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

    A-ha! As the hook performed the "walk" through the repository it had found a .git directory under legacy.d/buildtools and that is exactly where the assert ext == '.git' occurred.

    I had used the server to store a simple clone from some other repository. Notice, a plain clone, not a mirror or a bare repository. Like every clone it contained .git directory.

    The hook in Gitosis doesn't know what to do with a .git directory. It thinks that it's a repository in an empty name and aborts. Once I wiped out that clone everything resumed working nicely.

提交回复
热议问题