【问题标题】:Gitosis requires password even though the public key is given即使给出了公钥,Gitosis 也需要密码
【发布时间】:2009-05-25 14:45:58
【问题描述】:

在我的 Archlinux 上配置 gitosis 时遇到了一些问题

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

参考了这篇wiki文章,成功安装了gitosis。

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

并修改 /srv/gitosis/.ssh/authorized_keys 以包含我本地用户的 id_rsa.pub。

但是当我以本地用户身份运行 git clone 时,

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

它说

在 /home/wyx/gitosis-admin/.git/ 中初始化空的 Git 存储库
gitosis@10.132.140.73的密码:*****
致命:“gitosis-admin.git”似乎不是 git 存储库
致命:远端意外挂断

所以 git clone 操作失败了。我想知道为什么它会尝试在我的本地用户目录(/home/wyx)中初始化一个空的 git 存储库?既然我已经在 .ssh/authorized_keys 中添加了本地用户的 id_rsa.pub,为什么还要输入密码呢?

【问题讨论】:

  • 或者只是重启你的控制台

标签: git installation gitosis


【解决方案1】:

创建了一个空存储库,因为这正是 git 的工作方式:它必须先初始化一个存储库,然后才能开始将远程对象拉入其中。不幸的是,这意味着您必须在再次尝试克隆之前手动删除空仓库。

至于克隆失败的原因,看来您在远程存储库路径中使用了错误的语法; git clone 不使用 scp 语法。实际上,如果您不指定克隆协议,我相信它假定使用 git 协议而不是 ssh,这可能就是它要求您输入密码的原因。试试这个:

$ git clone ssh://gitosis@host/~/gitosis-admin.git

【讨论】:

  • 感谢您的回复。最后我发现问题在于我使用了错误的公共 rsa 密钥,而 ssh:// 语法又是一个错误。
  • 从 git 1.6+ 开始,您不必指定协议。所以 user@host:reponame.git 会起作用。
【解决方案2】:

我也遇到了同样的问题“致命:'/gitosis-admin.git' 似乎不是一个有效的存储库。” 我搜索了很多问题,终于找到了解决方案。

实际上,gitosis 用户的默认地址是“/srv/gitosis”:就像我的设置有 ubuntu 服务器 10.04。

当我们编写“git clone gitosis@server.com:gitosis-admin.git”时,它会在 /srv/gitosis 中搜索 gitosis-admin.git 存储库。因此,当我进入 /srv/gitosis 内部时,我发现其中还有一个名为 repositories 的存储库,它由 gitosis-admin.git 存储库组成。

所以实际上默认情况下 gitosis-admin.git 不在默认位置。所以我必须修改命令路径,然后它工作正常。

我将存储库克隆到我的本地计算机上。我将命令用作:

“git clone gitosis@server.com:repositories/gitosis-admin.git”对我来说效果很好。

查看 gitosis-admin 目录,希望你能解决你的问题。

【讨论】:

  • 就我而言,我必须更改为“git clone gitosis@server.com:/srv/gitosis/repositories/gitosis-admin.git”。但这不可能是正确的方法。还是坏了。
【解决方案3】:

这就是为我解决问题的方法(在 Ubuntu 上):

git clone gitosis@ns.home:/srv/gitosis/repositories/gitosis-admin.git

【讨论】:

    【解决方案4】:

    Gitosis 创建它自己的authorized_keys 文件。如果您已经拥有该文件,请将其删除并允许 gitosis-init 重新创建它。完成后,不要弄乱文件。

    【讨论】:

    • 这是我遇到的问题。我已经将 id_rsa.pub 复制到 ~gitosis/.ssh/authorized_keys 中。把它吹走,让 gitosis-init 写下它想要的(而不是附加到现有的)为我解决了这个问题。
    【解决方案5】:

    我在ubuntu上遇到了同样的问题,

    它适用于git clone ssh://git@serverName/absolutePath/gitosis-admin.git

    【讨论】:

      【解决方案6】:

      我解决了一个类似的问题。这可能与您的情况不完全一样,但您可以尝试重新应用我所做的相同故障排除。

      我意识到,当我为新用户推送密钥时,我得到了这个堆栈跟踪,这是 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 ...
      

      啊哈!当钩子在存储库中执行“遍历”时,它在legacy.d/buildtools 下找到了一个.git 目录,而这正是assert ext == '.git' 发生的地方。

      我曾使用服务器存储来自其他存储库的简单克隆。注意,一个普通的克隆,而不是镜像或裸存储库。像每个克隆一样,它包含 .git 目录。

      Gitosis 中的钩子不知道如何处理 .git 目录。它认为它是一个空名称的存储库并中止。一旦我消灭了那个克隆,一切都会恢复正常。

      【讨论】:

        【解决方案7】:

        通常不需要编辑authorized_keys。

        我曾经遇到过授权问题,即使我之前放置了我的公钥,gitosis 服务器也会不断询问我的密码。当我尝试提交并将更改推送到 gitosis 时,我意识到 gitosis 给了我一个警告“WARNING:gitosis.ssh:Unsafe SSH username in keyfile: 'myuser@myserver.pub'”。

        更改密钥文件中的 user@host 部分和密钥文件名称解决了我的问题。不知何故 gitosis 不喜欢以前的。

        【讨论】:

          【解决方案8】:

          终于搞定了

          git clone ssh://git@host:1337/home/git/repositories/gitosis-admin.git
          

          端口 ssh 使用的 1337 位置。

          【讨论】:

            【解决方案9】:

            同样的问题,在我的情况下,我在 .ssh/ 中有错误的授权密钥。我一定是在某个时候搞砸了……

            【讨论】:

              【解决方案10】:

              已经搬到新的 Ubuntu 机器并自己遇到这个问题,我在这里看到几个答案让我朝着正确的方向前进,即使用 .git 文件的绝对路径每个存储库。

              尝试了一下,我注意到相对于 git 用户主目录的路径也有效,这缩短了如下内容:

              git@host:/var/git/repositories/project.git
              

              下到

              git@host:repositories/project.git
              

              再玩一点,我尝试将项目文件从存储库移动到 git 的主目录;现在只需要项目:

              git@host:project.git
              

              这有点hacky,但我怀疑会造成任何伤害。很高兴知道发生了什么变化,因为我在另一个 Ubuntu(较旧)上托管 gitosis 并且能够使用上面的最后一个符号将项目放在存储库目录中。

              【讨论】:

                【解决方案11】:

                要更深入地了解身份验证问题,请收集详细的调试日志详细信息:通过使用

                ssh -vvv gitosis@gitosis_host

                直接手动连接技巧(用最重要/一般来说,实际上使用最精确/直接的上下文引用;在这种情况下:实际的 ssh 机制而不是工具距离 - 因此必然不太精确 - git 处理!)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-01-25
                  • 2018-11-16
                  • 2014-02-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多