Вывод: я использую Git для Windows 2.5.1 для аутентификации на Git-сервере Kerbesized. Когда я использую URL-адрес в форме https://el2-gitlab.sa.c/kkm/GrammarTools.git
, Git даже не пытается выполнить аутентификацию Negotiate и запрашивает имя пользователя и пароль. Обходной путь, чтобы заставить Git использовать SPNEGO, состоит в том, чтобы предоставить пустое имя пользователя и пароль в самом URL-адресе, как в https://:@el2-gitlab.sa.c/kkm/GrammarTools.git
. В этом случае Git успешно аутентифицируется с помощью существующего билета Kerberos.
Могу ли я настроить Git для использования SPNEGO без изменения удаленного URL-адреса?
Подробнее. Я потратил довольно много времени, пытаясь решить проблему. Сначала я попытался задать пустое имя пользователя в .gitconfig, но безрезультатно:
[credential "https://el2-gitlab.sa.c"]
username = ''
Я не раз сталкивался с вопросами по обратной проблеме, когда Git отказывался возвращаться к Basic после неудачной попытки Negotiate, но поведение подтверждено изменение в версии 2.3.1.
Ответ на запросы с пустым именем пользователя и паролем не помогает, вопреки некоторым предложениям, которые я мог найти на SO (но они могут быть до версии 2.3.1).
Наконец, подробный вывод libcurl (в сокращении) показывает, что Git действительно пытается выполнить обычную аутентификацию и полностью отказывается от Negotiate:
$ export GIT_CURL_VERBOSE=1
$ git clone https://el2-gitlab.sa.c/kkm/GrammarTools.git kerbtest
Cloning into 'kerbtest'...
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
<
* Connection #0 to host el2-gitlab.sa.c left intact
Username for 'https://el2-gitlab.sa.c':
Также может представлять интерес то, что клиент Git повторяет неаутентифицированный запрос на 401 во второй раз, прежде чем ответить билетом:
$ git clone https://:@el2-gitlab.sa.c/kkm/GrammarTools.git kerbtest
Cloning into 'kerbtest'...
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
* Connection #0 to host el2-gitlab.sa.c left intact
* Issue another request to this URL: 'https://:@el2-gitlab.sa.c/kkm/GrammarTools.git/info/refs?service=git-upload-pack'
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
<
* Issue another request to this URL: 'https://:@el2-gitlab.sa.c/kkm/GrammarTools.git/info/refs?service=git-upload-pack'
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
Authorization: Negotiate YIIGtg[ .... trimmed ... ]
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 200 OK
git config http.emptyAuth true
. См. мой ответ ниже - person VonC   schedule 25.02.2016