Git

哪些“訪問權限”可能會阻止對 gitlab 儲存庫的訪問?

  • September 29, 2014

我正在嘗試在全新乾淨的伺服器上設置 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.

這似乎是一個相當普遍的問題。不幸的是,它似乎有許多潛在的原因,但似乎沒有一個是匹配的。從舊版本的issue 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 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/port/interface 綁定 C) 沒有/有斜杠。

檢查腳本說 API 訪問很好。

我沒有執行 nginx,因此與此相關的預設 ip 綁定問題是 n/a。

我已經嘗試了*:8080127.0.0.1:8080中的監聽值unicorn.yml

除此之外,我嘗試了 localhost、127.0.0.1 和完全限定域名(DNS 解析良好)的各種迭代,無論是否使用斜杠shell.yml都無濟於事。我還嘗試將其直接連接到埠 8080 上的獨角獸伺服器,而不是埠 80 上的 Apache SSL / 代理主機。似乎沒有任何區別。我的證書不是自簽名的,在瀏覽器上執行良好,但我還是嘗試設置self_signed_cert: true。沒有。

  • 報告的 git 路徑錯誤,從 gitlab 使用者家添加完全限定路徑。

如果 gitlab-shell 沒有做一些猴子業務來糾正這個問題,這似乎是一個合法的建議,但我嘗試更改git remote add origin gitlab@server:username/reponame.gitgit 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 調試消息,我很確定您在 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...

與**/path/to/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

引用自:https://serverfault.com/questions/575836