Authentication

git 拒絕通過 HTTP 發送憑據

  • September 18, 2018

curl似乎工作正常,但git沒有。git要求輸入密碼,但隨後不發送任何憑據。

作品:curl --netrc http://test.git.unsw.edu.au/curl -u username:password http://test.git.unsw.edu.au/

不起作用:git remote update

Password for 'http://username@test.git.unsw.edu.au': 
* Couldn't find host test.git.unsw.edu.au in the .netrc file; using defaults
User-Agent: git/1.7.9.5
Host: test.git.unsw.edu.au
Accept: */*
Pragma: no-cache

為什麼不git發送憑據?

從一個strace,我看到:

  1. .netrc
  2. GET /repo/info/refs?service=git-receive-pack HTTP/1.1- 沒有憑據
  3. HTTP/1.0 401 Unauthorized
  4. .netrc
  5. GET /repo/info/refs?service=git-receive-pack HTTP/1.0- 沒有憑據
  6. HTTP/1.0 401 Unauthorized
  7. 提示輸入密碼
  8. .netrc
  9. * Couldn't find host test.git.unsw.edu.au in the .netrc file; using defaults
  10. GET /repo/info/refs?service=git-receive-pack HTTP/1.1- 沒有憑據
  11. HTTP/1.0 401 Unauthorized

Git 似乎只使用CURLAUTH_ANY不適用於我的特定 Web 伺服器的。我的 Web 伺服器支持Negotiateand Basic,因此 Git 不會回退到客戶端不可用時BasicNegotiate

此外,Git 似乎沒有其他選項可以使用CURLAUTH_ANY.

查看手冊頁,似乎 git 在與 http 一起使用時沒有使用使用者名選項。但是如果你把它放在你的 .netrc 文件中,curl 應該使用它。.netrc 的格式是

machine hostname login yourusername password yourpassword

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