哪些“访问权限”可能会阻止访问 gitlab 存储库?

哪些“访问权限”可能会阻止访问 gitlab 存储库?

我正在尝试在一台全新的干净服务器上设置 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 [email protected] 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都会创建裸 git repo,并且似乎具有正确的权限。

  • Gitlab-shell 无法与 API 服务器通信,因为 A) DNS 问题,B) 错误的 ip/端口/接口绑定 C) 没有/有尾随斜杠。

    检查脚本表明 API 访问正常。

    我没有运行 nginx,因此与此相关的默认 ip 绑定问题是 n/a。

    我已尝试*:8080127.0.0.1:8080来获取中的监听值unicorn.yml

    除此之外,我尝试了 localhost、127.0.0.1 和完全限定域名(DNS 解析正常)的各种迭代,带或不带尾部斜杠,但都shell.yml无济于事。我还尝试将其直接连接到端口 8080 上的 unicorn 服务器,而不是端口 80 上的 Apache SSL/代理主机。似乎没有任何区别。我的证书是不是自签名的,在浏览器上运行良好,但我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。哪里可以找到更具参考价值的错误消息?

答案1

根据此 SSH 调试消息,我很确定您的 SSH 和系统之间存在配置问题:

client_input_channel_req: channel 0 rtype [email protected] reply 0

验证成功后您会立即收到此消息,并且没有来自 bash 的消息,这意味着登录后没有启动任何程序。

查看你的 passwd 文件中是否对 gitlab 用户进行了正确的设置:

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

验证 bash 的配置文件中没有奇怪的东西,例如

  • .bashrc文件
  • 。轮廓
  • .bashrc

然后进入上层:Gitlab-shell验证/路径/到/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-shell,则在您尝试远程登录之前,您应该会收到相同的欢迎消息(但与您用于登录的 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

答案2

我也遇到了同样的问题,经过几天的谷歌搜索和 Stack Overflow 搜索,我终于找到了我的问题。我想以书面形式将其与 Gitlab 联系起来,以防其他人遇到同样的问题。

我在这里找到了解决方案:https://stackoverflow.com/questions/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

我在 Windows 上,问题是 Git Bash 试图从使用 Putty 安装的 plink.exe 获取其 SSH 密钥位置。

解决方案是删除环境变量 GIT_SSH。然后一切正常。

希望这对某些人有帮助。

相关内容