Ubuntu

僅從特定伺服器拒絕通過 SSH 訪問的 Git 複製

  • January 28, 2015

我的辦公室網路中有一個 Ubuntu 12.04 伺服器,用於託管我們的 git 儲存庫。伺服器正在執行 Gitlab 7.1.1,並且在非標準埠上有 SSH。

它適用於辦公室網路內外的每個人,但有一個例外。例外是託管公司的託管伺服器,所以我只能有限地訪問它。

當我嘗試在非標準埠上複製 repo 時,它會超時。我認為這是因為傳出埠被託管公司阻止。為了解決這個問題,我在辦公室路由器上設置了埠轉發,將埠 22 上的傳入流量轉發到 git 伺服器上的非標準埠。我通過在沒有指定埠的情況下從 Digial Ocean VPS 複製進行了測試,它執行良好。

但是有問題的伺服器現在給出以下錯誤:

Access denied.
fatal: The remote end hung up unexpectedly

git 伺服器正在註冊一個正在建立的 SSH 連接,並接受公鑰,如下所示/var/log/auth.log

Jan 20 15:09:07 gitlab sshd[3043]: Accepted publickey for git from 10.0.1.254 port 60771 ssh2
Jan 20 15:09:07 gitlab sshd[3043]: pam_unix(sshd:session): session opened for user git by (uid=0)
Jan 20 15:09:09 gitlab sshd[3162]: Received disconnect from 10.0.1.254: 11: disconnected by user
Jan 20 15:09:09 gitlab sshd[3043]: pam_unix(sshd:session): session closed for user git

這看起來與日誌中的任何其他身份驗證請求沒有什麼不同,所以我不知道為什麼複製失敗了?

我在 Github 上設置了一個測試儲存庫,並且有問題的伺服器可以通過 SSH 很好地複製。出於某種原因,它只是通過 SSH 從我的辦公室伺服器中獲取 repos 的問題。

還值得注意的是,有問題的伺服器可以使用使用者名和密碼通過 HTTP 進行複製,只有通過 SSH 才有問題。

任何想法這裡的問題是什麼?

PS,我更像是一名編碼人員而不是伺服器管理員,我參與其中以嘗試改進我公司的部署過程,這對我來說很多都是新的

我已經解決了這個問題。

問題是有問題的伺服器的公鑰已經作為“部署密鑰”添加到 Gitlab 以進行早期不相關的測試。然後它作為部署密鑰被刪除,但由於某種原因,該密鑰保留在 Gitlab 數據庫中。然後 Gitlab 讓我將相同的密鑰重新添加到測試使用者,而不會抱怨它已經存在於數據庫的其他地方。但是當嘗試使用該密鑰進行身份驗證時,Gitlab 會查找該密鑰,並獲得第一個“孤立”密鑰,因此它只會提供匿名訪問,這顯然不允許複製。

為了解決這個問題,我找到了孤立的密鑰 ID,並使用 git-shell 將其刪除:

./bin/gitlab-keys rm-key key-21

21孤立密鑰的 ID 在哪裡。

現在一切都按預期工作。

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