Настройка Git в Windows для использования проверки подлинности прокси NTLM

Я пытаюсь получить доступ к репозиторию на Github с компьютера Windows, который находится за прокси-сервером, требующим аутентификации NTLM. Ни SSH, ни протокол git: // напрямую не доступны, поэтому я пытаюсь заставить эту работу работать с HTTPS через прокси.

С помощью прокси NTLM без пароля? мне удалось создать двоичный файл curl, поставляемый с msysgit поиграйте с прокси:

curl -U : --proxy-ntlm --proxy xxx.xxx.xx.xx:8080 https://github.com

Это успешно и возвращает домашнюю страницу Github.

Однако я нашел статью Git за февраль 2010 г., в которой говорится (выделено мной ):

К сожалению, похоже, что curl всегда будет использовать обычную проверку подлинности с прокси. Если вашему прокси-серверу требуется что-то еще, например NTLM для сети Windows, то у вас проблема. Curl используется для обработки всех деталей транспорта http, и он поддерживает метод проверки подлинности NTLM, но я не знаю способа передать необходимые параметры в curl. Git использует curl через привязку к библиотеке, поэтому недостаточно просто заменить исполняемый файл curl сценарием-оболочкой.

Я знаю о параметре core.gitproxy в конфигурации Git, но, похоже, он применим только к протоколу git: //. Точно так же опция http.proxy устанавливает адрес прокси, но не дает возможности указать соответствующие параметры для curl.


person Greg Hewgill    schedule 20.02.2011    source источник
comment
Думаю, комментарий в статье не имеет смысла. curl использует библиотеку libcurl, которая реализует поддержку NTLM. Другой вопрос, поддерживает ли git такую ​​функциональность, предоставляемую libcurl.   -  person Artefacto    schedule 21.02.2011
comment
Кстати, вы можете попробовать использовать iptables для перенаправления запросов к github.com на ваш собственный компьютер и заставить его действовать как прозрачный прокси-сервер, который затем перенаправляет на прокси-сервер NTLM с использованием надлежащей аутентификации. Но к этому времени будет проще просто настроить VPN и направлять через него трафик на github.com.   -  person Artefacto    schedule 21.02.2011
comment
@Artefacto: Да, я понимаю, что и git, и curl используют libcurl, но вопрос в том, как передать необходимые параметры, связанные с NTLM, через git в libcurl. Кроме того, об iptables не может быть и речи, потому что (а) клиентский компьютер - это Windows, и (б) доступ локального администратора недоступен.   -  person Greg Hewgill    schedule 21.02.2011
comment
Я думаю, это просто вопрос использования curl_easy_setopt(handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM) вместе с другими обычными вариантами аутентификации прокси (CURLOPT_PROXY, CURLOPT_PROXY_TYPE и CURLOPT_PROXYUSERPWD).   -  person Artefacto    schedule 21.02.2011


Ответы (5)


Попробуйте Cntlm. Это прокси-сервер, предназначенный для размещения между программой, которая не понимает NTLM (например, Git), и прокси, требующим NTLM. Он выполняет проверку подлинности NTLM, поэтому приложению этого не требуется.

Я не использовал его, поэтому не знаю, насколько хорошо он работает.

person Richard Hansen    schedule 25.07.2011
comment
Версия cntlm для Windows имеет неприятную ошибку: она не читает родительский прокси из файла .ini - вы должны передать его как аргумент командной строки. - person George Chakhidze; 31.01.2012
comment
Я использовал ntlmaps, и он тоже работает. Вам не нужны права администратора, чтобы использовать его, что является плюсом по сравнению с cntlm - person Juancentro; 30.08.2013
comment
После установки типа аутентификации у меня отлично поработало. В Linux запустите cntlm -M <test-address>, чтобы он мог определить лучший из доступных вам типов, хотя не уверен, что вы сделаете то же самое в Windows. - person Herick; 05.11.2014

Я использовал прокси-сервер аутентификации CNTLM (хотя это, скорее всего, также будет работать для ntlmaps), поэтому git мог работать и добавил прокси http и https как http:// localhost:3218. Git потребовалось бы очень много времени для выполнения любых удаленных действий, таких как выборка, извлечение или клонирование.

Исправление состояло в том, чтобы использовать вместо этого: http:// 127.0.0.1:3218

После того, как это было изменено в .gitconfig, он работал намного быстрее.

NB: удалите пробелы между http: // и 127.0.0.1.

Ex:

[http] proxy = http:// 127.0.0.1:3128 [https] proxy = http:// 127.0.0.1:3128

person jhamm    schedule 28.04.2014
comment
Если использование localhost занимает больше времени, значит, у вас неисправная система разрешения имен. При правильно настроенной системе использование localhost и 127.0.0.1 должно обеспечивать эквивалентную производительность. - person Greg Hewgill; 29.04.2014
comment
Спасибо, jhamm, localhost не работал, но 127.0.0.1 работает отлично! - person pierrefevrier; 21.10.2014
comment
Я ждал +/- 7 минут для команд git уже несколько месяцев, переход с localhost на 127.0.0.1 снизил это до 2 секунд. Для этого нужно больше голосов! - person Nino van Hooff; 13.01.2015
comment
@Greg Hewgill, скорее всего, это ошибка в GIT, поскольку nslookup localhost мгновенно возвращается с 127.0.0.1. Никакое другое программное обеспечение ИЛИ скрипты, которые у меня есть, которые используют прокси, не имеют задержки при подключении к прокси в localhost. Перед подключением Git потребовалось 2,5 минуты, теперь мгновенно с 127.0.0.1. - person Adam Kerz; 09.03.2015
comment
Вместо того, чтобы устанавливать прокси в конфигах git, я бы рекомендовал использовать netsh. В командной строке вы можете установить это как netsh winhttp set proxy http://127.0.0.1:3128. Преимущество этого способа состоит в том, что это повлияет не только на git, но и на другие приложения, которые вам могут понадобиться, такие как curl и npm. - person Okonomiyaki3000; 01.03.2016

Спасибо @ richard-hansen за указание на Cntlm. Он предоставляет не-Windows-адаптер для Windows-прокси. Очень аккуратный.

Вот точные шаги, которые у меня сработали:

  1. Загрузите и установите Cntlm для windows.
  2. Откройте Cntlm.ini (он находится в папке установки.)
  3. Обновите имя пользователя, домен. Сохрани это.
  4. Запустите cntlm -I -M http://google.com из командной строки.
  5. Cntlm спросит пароль, который вы будете использовать для прокси-сервера. Дай это. (Скорее всего, это ваш пароль Windows)
  6. Cntlm определит метод аутентификации и сгенерирует ключ. Получите тот результат. (например, NTLMv2 77B9081511704EE852F94227CF48A793)
  7. Обновите Cntlm.ini этой информацией. (Раскомментируйте соответствующую аутентификацию и обновите ключ)
  8. Сохранить и закрыть.
  9. Теперь вам нужно запустить прокси-сервер Cntlm. net start cntlm
  10. Теперь обновите приложение информацией о прокси Cntlm. Для Cntlm это 127.0.0.1:3128 (Эта информация находится в ini-файле. Если вы хотите, чтобы она была другой, измените ее там). В случае git git config --global http.proxy 127.0.0.1:3128
  11. Теперь git должен нормально работать через прокси.

Удачи! Подробные инструкции см. здесь.

person Community    schedule 07.03.2014

С mysysgit 1.9.5 (или, возможно, более ранними версиями, но непроверенными) вы можете сделать это без встраивания имени пользователя и пароля в текстовый файл конфигурации на диске.

клиент git, использующий GSSAPI для проверки подлинности прокси NTLM

И для этого не требуется cntlm.

person JonT    schedule 06.04.2015

Вариант http.proxy отлично работает для прокси NTLM в Windows, проверьте мой следующий ответ в аналогичном вопросе:

https://stackoverflow.com/a/10848870/352672

person Nelson    schedule 11.08.2018