git "fatal: проверка подлинности не выполнена для" http: ... "" из Microsoft Visual Studio Team Foundation Server - PullRequest
0 голосов
/ 14 января 2019

Я обновил свой Ubuntu до 18.10 (с 17.10). Теперь я не могу подключиться к серверу Microsoft Visual Studio Team Foundation Server моего проекта (версия 16.131.27701.1) из интерфейса командной строки. (Я не работал над хранилищем в течение двух недель. Поэтому я не знаю, изменилась ли и серверная сторона за это время.)

$ git fetch
Username for 'http://....net:8080': NUNNI
Password for 'http://NUNNI@....net:8080': 
fatal: Authentication failed for 'http://....net:8080/tfs/AE/_git/AE-VMT/'

(Да, это не HTTPS, а через какой-то VPN.)

К сожалению, я не смог найти полезного ответа на мою ситуацию.

Некоторые исследования показали:

$ GIT_CURL_VERBOSE=2 git fetch
...
< WWW-Authenticate: Bearer
< WWW-Authenticate: Negotiate
< WWW-Authenticate: NTLM
...

Похоже, что Negotiate (Kerberos или NTLM) или NTLM объявляются для аутентификации через заголовки HTTP.

curl --negotiate "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"

не работает; Заголовочный элемент HTML:

TF400813: Resource not available for anonymous access. Client authentication required. - Microsoft Team Foundation Server

Принимая во внимание

curl --ntlm "http://NUNNI:<password>@....net:8080/tfs/AE/_git/AE-VMT"

отлично работает.

Насколько я понял, https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/understanding-http-authentication, Negotiate предпочтительнее, чем NTLM.

Так что для меня это выглядит так, как будто cURL не работает для Negotiate в этой ситуации. (Насколько я понял в документации MS, при подключении следует предпочитать Kerberos, если он доступен, и использовать NTLM, если Kerberos недоступен.)

Вопросы:

  • Как я могу проверить, не поддерживается ли Kerberos серверной стороной или моим локальным cURL.
  • Можно ли заставить git использовать NTLM вместо Negotiate. (Я читал кое-что о HTTP / NTLM-прокси в разных статьях stackoverflow, но он не работал, когда я пытался настроить Git-репозиторий для NTLM-прокси - я не ожидал, что это сработает.)
  • Какие-нибудь другие идеи, чтобы решить проблему или получить более подробную информацию о том, что происходит?

Большое спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Если вы используете имя пользователя и пароль, вы явно не используете Kerberos. Использование имени пользователя и пароля для HTTP-аутентификации ортогонально Kerberos.

Как я могу проверить, не поддерживается ли Kerberos серверной стороной или моим локальным cURL.

Запустите klist -5fea, чтобы узнать, есть ли у вас билет Kerberos. Если это так, вы сможете curl --negotiate без указания имени пользователя и пароля; curl будет использовать ваш билет Kerberos для аутентификации. Если у вас нет билета, вам нужно будет использовать NTLM и использовать имя пользователя и пароль или использовать токен личного доступа (PAT).

Есть ли возможность заставить git использовать NTLM вместо Negotiate.

Да, использование имени пользователя и пароля должно явно отключить согласование.

Какие-нибудь другие идеи, чтобы решить проблему или получить более подробную информацию о том, что происходит?

Установите переменные окружения GIT_CURL_VERBOSE=1 и GIT_TRACE=1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...