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


14

我正在尝试在全新的干净服务器上设置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环境var相关的错误。

    我的就干净了。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 eow@openssh.com 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。

    我已经尝试了两者,*:8080并尝试了127.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。在哪里可以找到更多有用的错误消息?


什么是“ ssh -vv gitlab @ server”的输出?
DrGkill 2014年

@DrGkill(在我眼中)没什么有趣的,自己看看
Caleb 2014年

在sshd_config中查看是否允许gitlab进行外部登录。我会说两个可能的罪魁祸首:SSH或gitlab-shell。gitlab连接时auth.log说什么?
DrGkill 2014年

@DrGkill我已经检查过(如果sshd或pam不允许外部登录,则上面显示的日志将不会显示成功的身份验证通知)。SSH连接正常。服务器端日志显示成功的身份验证,会话已打开,有关设置用户环境的一些systemd内容,然后“收到与<remote ip>的断开连接”以及有关清理会话的更多内容。
Caleb 2014年

Answers:


7

我很确定您因为此SSH调试消息而在SSH和系统之间存在配置问题:

client_input_channel_req: channel 0 rtype eow@openssh.com reply 0

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

如果您为gitlab用户设置了正确的设置,请查看passwd文件:

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

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

  • bash.bashrc
  • 。轮廓
  • .bashrc

然后上升到更高级别:Gitlab-shell验证/path/to/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壳/斌/ gitlab壳由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

h <head-desk>您一直处在正确的轨道上。分配了gitlab用户/bin/false。在添加该用户时,Arch软件包没有设置正确的外壳,或者在该系统上实现ldap身份验证的过程中,我在某个地方将其破坏了。感谢您的所有努力。
Caleb 2014年

ty的答案,帮助我调试。另一个问题是,当您启用ssh密钥转发时,您将错误的密钥发送给无法识别您的gitlab。当您使用gitlab时,您还将获得Welcome Anonymous。只需使用ssh -a禁用跳转服务器上的密钥转发即可
tommics,2014年

我遇到了与Caleb相同的问题,而且我自己也发现,要使其正常工作,需要设置一个shell而不是/ bin / {false,true,nologin}。但是实际上是在安装过程中故意创建没有外壳的用户(请参阅:gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/…sudo adduser --disabled-login --gecos 'GitLab' git。因此,它应该在没有外壳的情况下工作。我仍在寻找另一种解决方案。
惠更斯2014年

0

我遇到了同样的问题,经过几天的谷歌搜索和搜索堆栈溢出,我终于找到了我的问题。我想以书面形式将此内容连接到Gitlab,以防其他人遇到相同的问题。

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

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

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

希望这可以帮助某人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.