【问题标题】:users are asked for password while using gitolite用户在使用 gitolite 时被要求输入密码
【发布时间】:2012-06-10 00:30:36
【问题描述】:

我已经在服务器(比如)10.107.105.13 上成功创建了gitolite-admin.git 存储库。我可以通过发出git clone gitolite@10.107.105.13:gitolite-admin 在我的本地机器上克隆这个repo(比如)10.14.42.7。我必须在.ssh/config 文件中添加一些行以确保使用正确的私钥。

然后我添加了一个用户dilawarconf/gitolite.conf 文件和一个适当的密钥dilawar.pubkeys 文件夹。我已将此提交添加并提交到gitolite-admin repo。我还在.ssh/conf 文件中添加了一个条目,以便使用正确的私钥。但是当我尝试做git clone dilawar@10.107.105.13:testing 时,gitolite 要求输入密码。我的印象是我不必在 10.107.105.13 上创建用户 dilawar。我通过登录服务器检查了存储库 testing.git 是否存在以及公钥dilawar.pub 已添加到.ssh/authorized_keys

我也试过ssh -vvvv dilawar@10.107.105.13 来检查是否提供了正确的文件。这是我的.ssh/conf 文件。

HostName 10.107.105.13 
    User gitolite
    IdentityFile ~/.ssh/gitolite

Host 10.107.105.13
    HostName 10.107.105.13 
    User dilawar 
    IdentityFile ~/.ssh/id_rsa

我做错了什么?

【问题讨论】:

    标签: gitolite


    【解决方案1】:

    在你的配置文件中,我看到了:

    User dilawar
    

    这是错误的。与 gitolite 服务器的 ssh 通信始终使用同一个帐户(此处为 gitolite)。
    使用的私钥有什么变化,这将有助于 gitolite 确定您的身份。

    ~/.ssh/config 文件应该是这样的:

    Host admin
        HostName 10.107.105.13 
        User gitolite
        IdentityFile ~/.ssh/gitolite
    
    Host dilawar
        HostName 10.107.105.13 
        User gitolite
        IdentityFile ~/.ssh/id_rsa
    

    要克隆 gitolite-admin,您可以使用:

    git clone admin:gitolite-admin
    

    要克隆一个 repo,dilawar 可以访问:

    git clone dilawar:aRepo
    

    在“Gitolite: adding user not working, and DENIED by fallthru when cloning as root?”查看更多信息。
    另见“how gitolite uses ssh

    将您的公钥添加到服务器的 ~git/.ssh/authorized_keys 文件是 ssh 使用 pubkeys 对用户进行身份验证的方式。
    假设sita@work.station 正在尝试以git@server 身份登录。
    您需要做的是在工作站上为用户sita 获取~sita/.ssh/id_rsa.pub 文件,并将其内容(记住它只有一行)附加到服务器上的~git/.ssh/authorized_keys 用户git .

    authorized_keys 文件可以添加多个公钥(来自许多不同的人),因此任何人都可以登录到git@server

    【讨论】:

      【解决方案2】:

      我已经通过使用 gitolite 用户名克隆存储库来使其工作。

      git clone gitolite@server:repo 
      

      如果键添加成功,那么进一步的拉和推就会顺利进行。

      我接受 VomC 答案作为更好的答案。

      【讨论】:

      • 当时没有看到你的答案。 +1 的反馈。我改进了答案的格式。
      【解决方案3】:

      VonC's answer 是关键,但我遇到了一个值得为未来搜索者提及的极端情况。

      即使你做对了其他所有事情,就像 VonC 的回答一样,ControlPath 的一些标准设置也会把事情搞砸。

      我在~/.ssh/config有两个用户,如下:

      Host gitolite
          HostName <whatever> 
          User git
          IdentityFile ~/.ssh/gitolite
      
      Host username
          HostName <whatever> 
          User git
          IdentityFile ~/.ssh/username
      

      理论上,这应该允许我运行git clone git@username:reponame,但服务器一直认为我试图以 gitolite 管理员(无权克隆该 repo)的身份克隆 repo,而不是作为gitolite 用户(有权克隆 repo)。

      问题是在我的所有主机部分中,我有以下内容:

      Hosts *
          # other stuff that doesn't matter
          ControlPath ~/.ssh/ssh-%r@%h:%p
      

      如果您没有立即看到(我没有看到!),那么问题在于 %r@%h%p (= username@hostname:port) 的扩展对于 gitolite 和用户名相同条目。他们都是git@hostname:port!一旦我意识到这一点,这很容易解决。只需将区别元素添加到这两个用户的更具体的ControlPath 条目中。例如,

      Host gitolite
          HostName <whatever> 
          User git
          IdentityFile ~/.ssh/gitolite
          ControlPath ~/.ssh/gitolite-admin-%r@%h:%p
      
      Host username
          HostName <whatever> 
          User git
          IdentityFile ~/.ssh/username
          ControlPath ~/.ssh/gitolite-username-%r@%h:%p
      

      【讨论】:

      • 有趣的边缘案例和ControlPath的使用。赞成。
      【解决方案4】:

      我必须编辑/etc/ssh/sshd_config 并将git(用户)添加到以AllowUsers 开头的行。 然后我必须将 git 添加到一个 sysadmin 组,该组也允许在 sshd_config 的以AllowGroups 开头的行上。

      不要忘记使用sudo service ssh restart 重新启动 ssh 守护进程。

      注意:我不必像之前建议的那样将ssh-copy-id 或将公钥添加到/home/git/.ssh/authorized_keys(gitolite 的开发人员建议不要这样做。)

      【讨论】:

        【解决方案5】:

        由于我的配置,我遇到了同样的问题,但使用了不同的解决方案。我将我的 gitolite 用户设置为“git”所以我需要做git clone git@server:repo.git

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-02
          • 2010-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-01
          • 1970-01-01
          • 2012-11-09
          相关资源
          最近更新 更多